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

52

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

Estaba siguiendo las instrucciones aquí comunidad / AWStats

Y dice ir al archivo en: /etc/crontab

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

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

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

¿Tendré que reiniciar el servidor después de guardar el trabajo cron en el crontabarchivo antes de que comience a funcionar?

timbram
fuente

Respuestas:

50

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

crontab -e es la mejor manera de hacerlo, esto le permitirá editar fácilmente crontabs por usuario.

Si programo una tarea como mi usuario no root, ¿se ejecutará sola 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 tareas programadas con los privilegios más bajos con los que pueda salirse con la suya, por lo que si lo que está haciendo no requerirá root, no use root. Si ni siquiera necesita poder acceder a los archivos y carpetas de su cuenta, puede crear un nuevo usuario y usar esa cuenta de usuario solo para esa tarea. Por otro lado, si su tarea no requiere de raíz, crontab uso de raíz ( su/ sudo sua raíz luego use crontab -e).

¿Tendré que reiniciar el servidor después de guardar el trabajo cron en el archivo crontab antes de que comience a funcionar?

No, comenzará a funcionar de inmediato (bueno, la próxima hora programada posible).

¿Por qué no editar el archivo directamente? ¿Donde está localizado?

Los archivos crontab de los usuarios se encuentran en /var/spool/cron/crontabssus archivos , pero sus permisos están configurados de tal manera que no se pueden atravesar sin el permiso del superusuario (pero una vez abiertos y el proceso cron pierde los privilegios, aún puede acceder 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 DO NOT EDIT THIS FILEadvertencia severa en la parte superior para este efecto. En cambio, el archivo está diseñado para editarse mediante el crontab -ecual configura un espejo temporal del archivo /tmppara su edición, sin la advertencia severa, después de lo cual comprueba e instala el archivo crontab permanente. Todo esto se puede hacer sin el permiso del superusuario.

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

thomasrutter
fuente
55
crontab -ele permite editar su crontab de usuario sin sudo. Los crontabs de usuario se encuentran en /var/spool/cron/crontabsun directorio al que no se puede acceder sin el permiso del superusuario (pero de tal manera que una vez que cron elimina los privilegios, aún puede leerlo). Incluso si usa sudo para intentar editar el archivo directamente, verá una gran advertencia en la parte superior, "NO EDITE ESTE ARCHIVO": el archivo está diseñado para editarse con el crontabcomando que usa una copia temporal /tmpy luego se instala después de guardarlo.
thomasrutter
25

Cada usuario tiene su propio crontab.

Para verlo solo escribe

crontab -l

y sí, lo has visto bien, cuando quieres agregar un y crontabluego simplemente haz

crontab -e

por primera vez se le preguntará sobre el editor que debe usar crontab. Como eres un novato como dices, te recomendaría usar nano, es el editor más simple 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

Entonces, por ejemplo, para activar un trabajo cada 15 minutos solo los lunes, lo haces así

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

y SÍ, es muy importante que coloque su cronjob en el crontab del usuario que tiene suficientes derechos para ejecutarlo.

Entonces, si su script debe ser root o un usuario especial, asegúrese de su su a ese usuario y agregue el cronjob allí.

También muy importante!

cronjob es tonto! Si lo dije. Siempre asegúrese de ingresar la RUTA completa a la application/command/scriptque está utilizando, porque crontab no funcionará con .bashrco similar. Siempre debe asegurarse de decirle a cron dónde puede encontrar los archivos y directorios.

Para responder el resto de sus preguntas:

Por supuesto, se ejecutará solo, para eso está ahí. Pero debe verificar que cronjob realmente lo haga, o si le falta algo. Por ejemplo, inicie sesión en un archivo de registro para ver si realmente funciona.

Y NO, no es necesario reiniciar. Normalmente, solo es necesario reiniciar con Linux si instala un nuevo núcleo. Para usarlo, necesitarías reiniciar. Casi todo lo demás se puede hacer sin reiniciar en Linux. Por supuesto que hay excepciones, pero en general esta afirmación es correcta.

s1mmel
fuente
para revisar su formato de tiempo revise este sitio crontab.guru
Astm