Come eseguire un cron job solo una volta?


14

Ho un lavoro che dura per sempre nel momento in cui inizia. Quindi voglio avviarlo solo una volta dopo averlo inserito nel file "crontab -e" e averlo salvato (o) ogni volta che si verifica il riavvio.

Come raggiungere questo obiettivo?

Risposte:


22

Se si desidera eseguire un comando una volta in un secondo momento, utilizzare il atcomando.

Se si desidera eseguire un comando una volta all'avvio del sistema, la soluzione corretta è utilizzare:

  • script RC di sistema (/etc/rc.local)
  • crontab con il @rebootprefisso speciale (vedi manpage)

Quest'ultima è l'unica opzione per un utente non root.


2
+1 per menzionare @reboot.
Alex Holst,

Preferirei sempre usare /etc/rc.local se possibile ... Sospetto che @reboot esegua effettivamente i comandi all'avvio di crond, non all'avvio del sistema. Differenza sottile ma possibile.
MikeyB,

supponiamo di aver inserito @reboot "cmd ............." nel file crontab e di averlo salvato. Questo comando inizierà ora? (o) Si avvia solo dopo il riavvio?
Rama Vadakattu,

Provalo e vedi :) Quello che probabilmente dovrai fare è metterlo in crontab, quindi pianificare l'esecuzione immediata usandoat now
MikeyB l'

Buona risposta. Me ne dimentico sempre @reboot.
Bill Weiss,

9

È possibile utilizzare in (1) per eseguire un lavoro in futuro. Tuttavia, se vuoi eseguire qualcosa all'avvio e rimarrà in esecuzione da solo, forse vuoi una voce in /etc/init.d/ per questo? Ciò ti consentirebbe di avviarlo all'avvio.


1
Puoi anche usare rc.local. I comandi in /etc/rc.local "verranno eseguiti dopo tutti gli altri script init. Puoi mettere le tue cose di inizializzazione in rc.local se non vuoi fare le cose complete di stile Sys V."
Joe,

Joe: buona chiamata.
Bill Weiss,

Come fermare il processo avviato a comando? (Conosco kill id di processo dopo aver visto l'elenco di id di processo usando "comando ps" funziona anche per "a comando"). Creare script personalizzati è facile?
Rama Vadakattu,

Sì ad entrambi. È possibile interrompere l'utilizzo di tutti i processi kill(presupponendo che si disponga delle autorizzazioni per farlo, cosa che si fa per i propri processi). Realizzare uno script di init è davvero facile. Cerca /etc/init.d/uno script che non sia molto lungo e modella il tuo dopo di esso, o cerca Google making init scripts (your distribution).
Bill Weiss,

1
Molte distribuzioni includono uno script scheletro ( /etc/init.d/skeletonsu openSuSE) che puoi adattare per il tuo uso.
MikeyB,

3

Un lavoro che viene eseguito una sola volta e viene eseguito per sempre fino a quando non gli dici di morire viene chiamato "demone". Normalmente vengono avviati tramite script di script in /etc/init.d/.

Se il tuo lavoro termina ad un certo punto e può essere considerato un tipo unico di lavoro, allora potresti voler guardare il comando at. Ad esempio, se volessi eseguire il comando find alle 22:00 di stasera e solo questa volta avrei fatto:

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

1

Dai un'occhiata al comando at


cosa accadrà al riavvio del sistema? Devo inserire nuovamente "al comando"?
Rama Vadakattu,

Le voci del comando at non andranno perse al riavvio. ibm.com/developerworks/linux/library/l-job-scheduling.html è un'interessante introduzione alla pianificazione dei lavori
Dominik,

@Rama Vadakattu: "Le voci del comando at non andranno perse al riavvio." ... che non sono ancora stati giustiziati. Vedi la risposta di MikeyB .
In pausa fino a ulteriore avviso.

ok farò ulteriori ricerche su questo.
Rama Vadakattu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.