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 root):
@reboot /home/me/myscript.sh
Pero por alguna razón, myscript.sh no se ejecuta en el reinicio de 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?
Actualice para responder las preguntas de @ Anthon:
- Versión de Oracle-Linux: 5.8 (uname: 2.6.32-300.39.2.el5uek # 1 SMP)
- Versión de Cron: vixie-cron-4.1-81.el5.x86_64
- Sí,
/home
es una partición montada. Parece que este es el problema. ¿Cómo soluciono esto? - Actualmente,
myscript.sh
solo envía un mensaje de texto a un archivo/home/me
.
/home
una partición montada? ¿Cuáles son los contenidos de tu/home/me/myscript.sh
?@reboot
. oss.oracle.com/pipermail/el-errata/2012-March/002655.htmlmyscript.sh
ejecutable?chmod +x myscript.sh
.Respuestas:
Este puede ser un tema un poco confuso porque hay diferentes implementaciones de cron. También hubo varios errores que rompieron esta característica, y también hay algunos casos de uso en los que simplemente no funcionará, específicamente si realiza un apagado / arranque frente a un reinicio.
Loco
punto de datos # 1
Aquí se cubre uno de estos errores en Debian, titulado: cron: los trabajos de @reboot no se ejecutan . Esto parece haber llegado también a Ubuntu, lo que 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 no se está ejecutando .
extracto
La respuesta aceptada en ese Q&A también tenía este comentario:
Evidencia adicional
punto de datos # 3
Como evidencia adicional había este hilo de que alguien estaba intentando lo mismo y se frustraba de que no funcionara. Se titula: Hilo: Cron: los trabajos de @reboot no funcionan .
extracto
Una vez que este usuario anterior descubrió su problema, pudo
@reboot
trabajar con la entrada crontab de un usuario.No estoy completamente seguro de qué versión de cron se usa en Ubuntu, pero esto parece indicar que el usuario también puede usar
@reboot
, 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
Luego reinicié el sistema.
Después del reinicio.
Llevar lejos
Para obtener más información sobre cómo funciona el mecanismo real,
@reboot
me encontré con esta publicación de blog que analiza las entrañas. Se titula: @reboot: explica la magia cron simple .Depuración de crond
Puede aumentar el nivel de detalle
crond
agregando lo siguiente a este archivo de configuración en distribuciones basadas en RHEL / CentOS / Fedora.Los niveles válidos son 0, 1 o 2. Para revertir este archivo a su nivel de registro predeterminado, simplemente elimine
"-L 2"
cuando haya terminado de depurar la situación.fuente
@reboot
armé bien, está bien en ciertos crons, y aparentemente está defectuoso / roto en otros. De ahí la confusión.@reboot
funcionó una vez que te diste cuenta de que estaba intentando acceder a una unidad encriptada, que aún no se había montado.@reboot sleep 60; <your command>
. Para citar el hilo, "supongo que la directiva @reboot de cron se está ejecutando demasiado temprano en el proceso de arranque"Descubrí que en mi máquina Ubuntu, todavía no tengo acceso a los servicios dns, en el momento del reinicio. Esto me impidió montar volúmenes remotos. Esta cursi, pero simple, solución funcionó:
@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log
(en root cron; últimas partes solo para depuración)
fuente
También tengo mac osx y tuve el mismo problema donde mi script no se estaba ejecutando. pero cuando arreglé mi script para gustar
Funcionó bien para mí. asegúrese de hacer que su archivo shell sea ejecutable ejecutando el comando
fuente
No sé si ya resolvió esto, o si alguna de las soluciones anteriores era la solución que necesitaba, pero otra posibilidad es:
si tiene su directorio / home encriptado, es posible que no esté disponible hasta que inicie sesión, es decir, no está disponible al reiniciar.
en este escenario, podría mover sus scripts a otra ubicación como / srv u / opt o / usr / local / bin / etc.
fuente
Realice una nueva instalación de Ubuntu Gnome 13.10 (usuario predeterminado en mi caso: avanderneut).
Y vea que después de reiniciar el archivo
/var/tmp/xxx
está allí, aunque no estaba allí antes de reiniciar.Esto se hizo con cron versión 3.0.
Debe asegurarse de que no se utilicen discos de servicios, etc. que puedan no estar disponibles en el momento en que se ejecuta el script. Comience con algo simple como lo anterior y asegúrese de que no tenga salida de terminal ya que el correo electrónico probablemente no esté funcionando.
Es posible que también necesite un cron más actualizado (o una actualización de oracle-linux) si esto no funcionó para usted y necesita esta función.
fuente
/dev/mapper/VolGroup00-LogVol01
partición montable .cron
. En mi humilde opinión, debe tomar una ruta diferente a crontab & @reboot para ejecutar algo una vez en el inicio como usuario.Yo diría que sí por la pregunta. Solo tuve dificultades para ejecutar cron al reiniciar (Debian 3.10.70) y logré resolverlo con:
@reboot root /usr/bin/python3 /path/to/script
Y un carácter de nueva línea '\ n' al final
Este es el contenido del archivo:
Finalmente, creo que vale la pena señalar un resumen de
man 5 crontab
fuente
En primer lugar, debe iniciar sesión como root:
Luego abra crontab:
Después de eso, agregue su script a crontab como root como a continuación:
Como resultado, vi que mi guión funcionaba bien.
Nota: Si edita crontab con su usuario actual, el reinicio no puede llamar a su script correctamente.
fuente
prueba:
usuario @ ubuntu: ~ $ touch script.sh usuario @ ubuntu: ~ $ chmod + x script.sh
usuario @ ubuntu: ~ $ $ crontrab -e
@reboot /home/usuario/script.sh
guarda y reinicia tu pc
fuente