GNU/Linux >> Tutoriales Linux >  >> Linux

¿El @reboot de Crontab solo funciona para root?

man 5 crontab es bastante claro sobre cómo usar crontab para ejecutar un script en el arranque:

   These special time specification "nicknames" are supported, which replace the 5 initial time and date
   fields, and are prefixed by the `@` character:
   @reboot    :    Run once after reboot.

Así que felizmente agregué una sola línea a mi crontab (bajo mi cuenta de usuario, no como root):

@reboot     /home/me/myscript.sh

Pero por alguna razón, myscript.sh no se ejecutaría al reiniciar la máquina.
(funciona bien si lo invoco desde la línea de comandos, por lo que no es un problema de permisos)

¿Qué me estoy perdiendo?

Actualización para responder a las preguntas de @Anthon:

  1. Versión de Oracle-linux:5.8 (uname:2.6.32-300.39.2.el5uek #1 SMP)
  2. Versión de Cron:vixie-cron-4.1-81.el5.x86_64
  3. Sí, /home es una partición montada. Parece que este es el problema. ¿Cómo soluciono esto?
  4. Actualmente, myscript.sh solo repite un mensaje de texto en un archivo en /home/me .

Respuesta aceptada:

Este puede ser un tema un poco confuso porque hay diferentes implementaciones de cron. También hubo varios errores que rompieron esta función, y también hay algunos casos de uso en los que simplemente no funcionará, específicamente si apaga/arranca o reinicia.

Errores

punto de datos #1

Uno de esos errores en Debian se cubre aquí, titulado:cron:los trabajos @reboot no se ejecutan. Esto parece haber llegado también a Ubuntu, lo cual no puedo confirmar directamente.

punto de datos #2

La evidencia del error en Ubuntu parece confirmarse aquí en este SO Q&A titulado:@reboot cronjob not executing.

extracto

comentario #1:…. 3) Es posible que su versión de crond no sea compatible con @reboot ¿está usando el crond de vix? … mostrar los resultados de crontab -l -u usuario

comentario n.° 2:… Podría ser una buena idea configurarlo como un script de inicio en lugar de depender de una versión específica de @reboot de cron.

comentario n.º 3:… @MarkRoberts eliminó el reinicio y modificó el 1 * * * * , a */1 * * * * , ¡el problema está resuelto! ¿Adónde envío a los rep pts Mark? ¡Gracias!

La respuesta aceptada en esa sesión de preguntas y respuestas también tenía este comentario:

Me parece que Lubuntu no es compatible con la sintaxis de @Reboot Cron.

Evidencia adicional

punto de datos #3

Como evidencia adicional, estaba este hilo de que alguien estaba intentando lo mismo y se frustró porque no funcionó. Se titula:Tema:Cron:los trabajos @reboot no funcionan.

extracto

Re:Cron:los trabajos @reboot no funcionan

Cita Publicado originalmente por ceallred Ver mensaje
Esto me está matando... Probé el script de envoltura. La ejecución manual genera el archivo de registro... el reinicio y el trabajo no se ejecuta ni crea el archivo de registro.

Syslog muestra que CRON ejecutó el trabajo... pero nuevamente, no hay salida y el proceso no se está ejecutando.
15 de julio 20:07:45 RavenWing cron[1026]:(CRON) INFO (Ejecutando trabajos @reboot)
15 de julio 20:07:45 RavenWing CRON[1053]:(ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1 &)

Parece que a cron no le gusta el comando @reboot... ¿Alguna otra idea?

Vale... Parcialmente resuelto. Marcaré este como resuelto y comenzaré un nuevo hilo con el nuevo problema...

Creo que la respuesta fue que mi directorio de inicio encriptado no estaba montado cuando CRON intentaba ejecutar el script (almacenado en /home/username/scripts). Movido a /usr/scripts y el trabajo se ejecuta como se esperaba.

Así que ahora parece ser un problema de spideroak. El proceso comienza, pero cuando finaliza el proceso de arranque, ya no está. Supongo que un accidente por alguna razón... Nuevo hilo para preguntar sobre eso.

¡Gracias por toda la ayuda!

Una vez que este usuario anterior descubrió su problema, pudo obtener @reboot trabajando con la entrada crontab de un usuario.

Relacionado:¿Por qué no se puede encontrar read /run/user/1000/gvfs aunque se esté ejecutando como root?

No estoy completamente seguro de qué versión de cron se usa en Ubuntu, pero esto parece indicar que el usuario puede usar @reboot también, o que el error se corrigió en algún momento en versiones posteriores de cron.

punto de datos #4

Probé en CentOS 6 lo siguiente y funcionó.

Ejemplo

$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1

Luego reinicié el sistema.

$ sudo reboot

Después del reinicio.

$ cat reboot.txt 
hi

Comida para llevar

  1. Esta función parece ser compatible con las entradas crontab del sistema y del usuario.
  2. Tienes que asegurarte de que sea compatible/funciona en tu distribución particular y/o versión del paquete cron.

Para obtener más información sobre cómo funciona el mecanismo real para @reboot Me encontré con esta publicación de blog que analiza las entrañas. Se titula:@reboot:explicación de la magia cron simple.

Depurando crond

Puede aumentar la verbosidad de crond agregando lo siguiente a este archivo de configuración en distribuciones basadas en RHEL/CentOS/Fedora.

$ more crond 
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS="-L 2"

Los niveles válidos son 0, 1 o 2. Para revertir este archivo a su nivel de registro predeterminado, simplemente elimine el "-L 2" cuando haya terminado de depurar la situación.


Linux
  1. ¿Dónde está .bashrc para root?

  2. la contraseña de root no funciona para su en la terminal

  3. Solo el usuario root puede abrir LibreOffice

  4. determinar ulimit para usuario root

  5. Haga que el archivo sea de solo lectura en Linux, incluso para root

Cómo ver o enumerar trabajos cron en Linux

Espacio reservado para la raíz en un sistema de archivos:¿por qué?

¿Diff -r solo para ciertos tipos de archivos?

Habilite la contraseña simple para el usuario root en CentOS

¿Es posible que root ejecute un comando como no root?

Cómo usar @reboot en /etc/cron.d