Ejecutar comando al inicio en crontab

24

Quería ejecutar un comando en nuestro linux después de que se haya reiniciado, vi que se puede hacer usando crontab. Quería ejecutar este comando

sudo ifdown eth0 && sudo ifup -v eth0

en el crontab puedo hacer:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

¿o necesito almacenar eso en un script?

gracias

Lottie
fuente
77
Crontab parece una herramienta incorrecta para reiniciar eth0. ¿Por qué no poner ese comando (sin sudo) en /etc/rc.local?
mikewhatever
¿Para qué necesitas hacer esto? Estas tareas generalmente se realizan automáticamente durante el proceso de arranque, y casi NUNCA necesitan ejecutarse por separado de los procesos de arranque automatizados ...
Thomas Ward
1
@mikewhatever no puedo votar en este momento, pero solo quiero agradecerles por sugerir eso.
Lottie

Respuestas:

34

Algunas notas aquí antes de que esto funcione:

  1. No lo use sudoen un trabajo cron. En su lugar, edite rootel crontab en lugar del suyo, por ejemplo, sudo crontab -ey luego ingrese los comandos sin sudo.
  2. Como @mikewhatever mencionó, este es un uso extraño para cron, y probablemente sería mejor colocarlo /etc/rc.localantes de la exit 0línea.
  3. Si nos dice exactamente lo que está buscando, es posible que podamos dirigirlo a una opción de registro o configuración (reiniciar sus servicios de red al inicio se siente un poco complicado).
  4. En la mayoría de los sistemas @reboottambién se debe ejecutar después de un apagado o bloqueo, pero hay diferentes implementaciones de cron así que YMMV. He visto comentarios en diferentes lugares afirmando ambos.

EDITAR (17/02/2016): se eliminó la publicidad incorrecta en las rutas absolutas; kudos @muru
EDIT (2016/10/17): Nota de cierre agregada
EDIT (2017/09/11): Nota de cierre revisada. No estoy realmente seguro de eso.

TheSchwa
fuente
ok solo quiero aclarar, debería escribir el comando completo etc/rc.localsin el sudo. entonces será solo ifdown eth0 && sudo ifup -v eth0 salida 0
Lottie
cronutiliza el PATHdado en /etc/environment, que tiene /sbin.
muru
Hice lo que @mikewhatever sugirió y funcionó. gracias
Lottie
1
@TheSchwa debería ser. Al menos desde 12.04, se /etc/pam.d/croncarga pam_env, por lo que /etc/environmentdebe leerse y PATHutilizarse el conjunto predeterminado . Esa respuesta fue publicada justo antes de que saliera el 12.04.
muru
2
@TheSchwa La afirmación de que el reinicio de cron no se ejecuta en un arranque en frío es incorrecta. Las líneas con reinicio se ejecutan cuando se inicia el demonio crond, punto. Eso es si se trata de un arranque en caliente, un arranque en frío o si no hubo arranque y simplemente apagué crond manualmente y lo volví a iniciar. El crond daemon no sabe ni le importa por qué se está reiniciando, simplemente ejecutará líneas de reinicio cada vez que lo haga.
Kurt Fitzner