¿Cómo ejecutar un trabajo cron solo una vez?

14

Tengo un trabajo que se ejecuta para siempre desde el momento en que comienza. Entonces, quiero iniciarlo solo una vez después de ingresarlo en el archivo "crontab -e" y guardarlo (o) cada vez que se reinicie.

¿Cómo lograr esto?

Rama Vadakattu
fuente

Respuestas:

22

Si desea que un comando se ejecute una vez en una fecha posterior, use el atcomando.

Si desea que un comando se ejecute una vez en el arranque del sistema, la solución correcta es usar:

  • scripts del sistema RC (/etc/rc.local)
  • crontab con el @rebootprefijo especial (ver página de manual)

Esta última es la única opción para un usuario no root.

MikeyB
fuente
2
+1 por mencionar @reboot.
Alex Holst
Siempre preferiría usar /etc/rc.local si es posible ... Sospecho que @reboot realmente ejecuta comandos en el inicio de crond, no en el arranque del sistema. Sutil pero posible diferencia.
MikeyB
supongamos que ingresé @reboot "cmd ............." en el archivo crontab y lo guardé. ¿Comenzará este comando ahora? (o) ¿Comienza solo después de reiniciar?
Rama Vadakattu
Probarlo y ver :) Lo que probablemente tendrá que hacer es ponerlo en crontab, a continuación, cronograma de ejecución inmediata utilizandoat now
MikeyB
Buena respuesta. Siempre olvido @reboot.
Bill Weiss
9

Puede usar en (1) para ejecutar un trabajo en algún momento en el futuro. Sin embargo, si desea ejecutar algo en el arranque y seguirá ejecutándose por sí solo, ¿tal vez desee una entrada en /etc/init.d/ para ello? Eso te permitiría iniciarlo en el arranque.

Bill Weiss
fuente
1
También puedes usar rc.local. Los comandos en /etc/rc.local "se ejecutarán después de todos los otros scripts de inicio. Puede poner su propio material de inicialización en rc.local si no desea hacer todo el material de inicio de estilo Sys V".
Joe
Joe: buena llamada.
Bill Weiss
¿Cómo detener el proceso que comenzó por comando? (Sé que matar id de proceso después de ver la lista de identificadores de proceso mediante el uso de "comando ps" también funciona para "en el comando"). ¿Es fácil crear scripts personalizados?
Rama Vadakattu
Sí a los dos. Todos los procesos se pueden detener usando kill(suponiendo que tenga los permisos para hacerlo, lo que hace para sus propios procesos). Hacer un guión de inicio es realmente fácil. Busque /etc/init.d/una secuencia de comandos que no sea muy larga y modele la suya después, o busque en google making init scripts (your distribution).
Bill Weiss
1
Muchas distribuciones incluyen un script de esqueleto ( /etc/init.d/skeletonen openSuSE) que puede adaptar para su uso.
MikeyB
3

Un trabajo que se ejecuta solo una vez y se ejecuta para siempre hasta que le digas que muera se llama "demonio". Normalmente se inician mediante scripts de inicio en /etc/init.d/.

Si su trabajo finaliza en algún momento y puede considerarse un tipo de trabajo único, entonces es posible que desee ver el comando at. Por ejemplo, si quisiera ejecutar el comando find a las 10 p.m. esta noche y solo esta vez lo haría:

$ at 10PM
at> find /root > /root/find_results.list
at> <EOT>
job 3 at 2010-02-10 22:00
CarpeNoctem
fuente
1

Echa un vistazo al comando at

Dominik
fuente
¿Qué pasará cuando se reinicie el sistema? ¿Necesito nuevamente ingresar "al comando"?
Rama Vadakattu
Las entradas del comando at no se perderán en los reinicios. ibm.com/developerworks/linux/library/l-job-scheduling.html es una introducción interesante a la programación de trabajos
Dominik
@Rama Vadakattu: "Las entradas en el comando no se perderán en los reinicios". ... que aún no se han ejecutado. Ver la respuesta de MikeyB .
Pausado hasta nuevo aviso.
ok haré más investigación sobre esto.
Rama Vadakattu