¿Cuál es la forma correcta de editar un archivo crontab?

Estoy tratando de automatizar la actualización de awstats para mi servidor web y entiendo que tengo que usar cron para configurarlo. Así que cada usuario tiene un archivo crontab?

Estaba siguiendo las instrucciones aquí community/AWStats

Y dice que hay que ir al archivo en: /etc/crontab

Ese archivo ya tiene algo de información. ¿Es este el archivo principal crontab o algo así? He visto algunas instrucciones en línea para utilizar el archivo que aparece con crontab -e .

¿Cuál es el archivo apropiado para usar y la mejor manera de hacerlo?

Si programo una tarea como mi usuario no root, ¿se ejecutará por sí misma en el intervalo de tiempo especificado, sin problemas?

¿Tendré que reiniciar el servidor después de guardar la tarea cron en el archivo crontab para que empiece a funcionar?

**¿Cuál es el archivo adecuado y la mejor manera de hacerlo?

La mejor manera de hacerlo es con el archivo crontab -e, que le permitirá editar fácilmente los crontabs por usuario.

**Si programo una tarea como usuario no root, ¿se ejecutará por sí misma en el intervalo de tiempo especificado, sin problemas?

Sí, y se ejecutará con los privilegios de esa cuenta de usuario.

Como principio, es mejor ejecutar las tareas programadas con los privilegios más bajos que pueda conseguir, así que si lo que está haciendo no requiere root, no use root. Si ni siquiera necesita poder acceder a los archivos y carpetas de su cuenta, entonces puede crear un nuevo usuario y utilizar esa cuenta de usuario sólo para esa tarea. Por otro lado, si tu tarea requiere root, usa el crontab de root (su / sudo su a root y luego usa crontab -e).

**¿Tendré que reiniciar el servidor después de guardar la tarea cron en el archivo crontab para que empiece a funcionar?

No, empezará a funcionar inmediatamente (bueno, a la siguiente hora programada).

**¿Por qué no editar el archivo directamente? ¿Dónde se encuentra?

Los archivos crontab de usuario se encuentran en /var/spool/cron/crontabs, pero sus permisos están configurados de tal manera que no se puede acceder a ellos sin permiso de superusuario (pero una vez abiertos y cuando el proceso cron pierde privilegios puede seguir accediendo al archivo).

El sistema no está diseñado para que los usuarios finales editen estos archivos directamente, y de hecho la parte superior del archivo tiene una severa advertencia de "NO EDITAR ESTE ARCHIVO" a este efecto. El archivo está diseñado para ser editado a través de crontab -e que establece una réplica temporal del archivo en /tmp para su edición - sin la severa advertencia - después de lo cual comprueba e instala el archivo crontab permanente. Todo esto se puede hacer sin permiso de superusuario.

Si editara el archivo crontab directamente, no sé cuál sería el resultado. Es posible que simplemente no surta efecto hasta el siguiente reinicio y que cualquier error sea difícil de depurar.

Comentarios (1)

Cada usuario tiene su propia crontab.

Para verla, basta con escribir

crontab -l

y, sí, lo has visto bien, cuando quieras añadir un crontab simplemente haz

crontab -e

por primera vez se te preguntará por el editor a utilizar con crontab. Como eres un novato como dices, yo'te recomendaría usar nano, es el editor más sencillo de usar.

El crontab en sí funciona así

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Así que, por ejemplo, para activar un trabajo cada 15 minutos sólo el lunes, lo haces así

*/15 * * * mon /home/me/yourscript.sh

y SÍ es muy importante que pongas tu cronjob en el crontab del usuario que tiene suficientes derechos para ejecutarlo.

Así que si su script necesita ser root o un usuario especial, asegúrese de su a ese usuario y añadir el cronjob allí.

También es muy importante.

¡cronjob es tonto! Sí, lo he dicho. Asegúrate siempre de introducir el PATH completo de la aplicación/comando/script que estás utilizando, porque crontab no funcionará con .bashrc o similares. Siempre tienes que asegurarte de decirle a cron dónde puede encontrar los archivos y directorios.

Para responder al resto de tus preguntas:

Por supuesto que se ejecutará por sí mismo, para eso está. Pero tienes que comprobar que cronjob realmente lo hace, o si le falta algo. Por ejemplo, entrar en un archivo de registro para ver si realmente funciona.

Y NO, un reinicio no es necesario. Un reinicio con linux normalmente solo es necesario, si instalas un nuevo kernel. Para que se utilice, es necesario reiniciar. Casi todo lo demás se puede hacer sin reiniciar en Linux. Claro que hay excepciones, pero en general esta afirmación es correcta.

Comentarios (1)