Primero de todo: ¿existe un usuario llamado "apache" en tu sistema y tiene como ruta
home /var/www/? Comprueba si está en
/etc/passwd... En mi Debian, ese usuario se llama
www-data.
Luego... comprueba si existe el archivo
/etc/cron.allow. Si existe, los usuarios que pueden ejecutar
crontab deberán estar listados allí. Si no existe, comprueba si existe
/etc/cron.deny. Si existe, los usuarios que no pueden ejecutar
crontab deberán estar listados allí. Más información en
man 1 crontab.
Luego... el archivo cronjobs.txt deberá tener permisos de lectura/escritura para tu
script por parte del usuario que ejecuta ese
script. Si es el Apache, entonces estamos hablando de un CGI, así que el Apache deberá tener permisos para entrar a esa carpeta y leer y modificar ese archivo.
Luego... averigua la posición de
crontab en tu sistema:
Using bash Syntax Highlighting
# which crontab
/usr/bin/crontab
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Esa es la ruta completa que usarás en el código, en lugar de solo 'crontab'.
La clave está en '-u apache'. Con eso estamos indicando que queremos actualizar la lista de trabajos del usuario 'apache'. El
crontab lo guardará en /var/spool/cron/crontabs, y cuando llegue el principio del minuto siguiente, lo leerá y comenzará a ejecutar. El dejarlo en /var/spool/cron/crontabs garantiza que, después de un reinicio del sistema,
crontab sepa qué tareas debe seguir realizando.
El directorio /var/spool/cron/crontab tiene estos permisos/propiedad:
drwx-wx--T 2 root crontab 4096 abr 10 2013 crontabsAsí que sí: el directorio es propiedad del
root por que se supone que los archivos que hay dentro solo deben ser accedidos a través del comando
crontab.