Più voci crontab @daily vengono elaborate in ordine, in serie?


22

Voglio che due lavori vengano eseguiti ogni giorno, in serie, esattamente nell'ordine specificato. Questo crontab farà in modo affidabile quello che voglio?

@daily job1
@daily job2

Sto assumendo che corrono uno dopo l'altro, ma non sono riuscito a trovare la risposta dalla ricerca sul Web o da una qualsiasi di queste pagine di manuale: cron(1), crontab(1), crontab(5).

Il crontab sopra ovviamente non farà ciò che voglio se cron esegue le cose programmate @dailyin parallelo o in un ordine imprevedibile.

So che posso semplicemente creare uno script di shell per attivarli in ordine, sono solo curioso di sapere come dovrebbe funzionare cron (e sono troppo pigro per raccogliere dati di test o leggere il codice sorgente).

Cron è fornito dal cronpacchetto. Il sistema operativo è Ubuntu 10.04 LTS (server).


Ti capita di sapere quale cron viene fornito dal cronpacchetto? Quasi tutti i demoni cron che conosco gestiranno questo in ordine, e in modo sincrono, di solito prima analizzando ogni file in ordine alfabetico (anche se alcuni lo fanno per tempo tra le esecuzioni in ordine crescente), e quindi i lavori all'interno in ordine di linea.
Chris Down,

5
Il fatto che sia sotto-specificato di solito significa che è lasciato all'implementazione, ed è generalmente meglio non dipendere da tale comportamento. Probabilmente è più pulito e meglio organizzato per inserire una sequenza di lavori in cui la sequenza conta nel proprio script anziché come voci crontab separate.
jw013,

@ChrisDown: Vixie Cron, penso. Packages.ubuntu.com/lucid/cron
Adam Monsen,

1
Suggerirei se vuoi davvero eseguirli in ordine, farne uno eseguire un minuto dopo.
Kevin,

@ jw013 e Kevin: d'accordo, ma non è una mia domanda.
Adam Monsen,

Risposte:


26

Dopo una rapida occhiata alla fonte (in Debian squeeze, che penso sia la stessa versione), sembra che le voci all'interno di un dato file e con gli stessi tempi vengano eseguite in ordine. A tal fine, @dailye 0 0 * * *sono identici (in realtà @dailyè identico a 0 0 * * *questo cron).

Non farei affidamento su questo su tutta la linea. È possibile che un giorno qualcuno decida che cron deve eseguire lavori in parallelo, per sfruttare queste CPU a 32 core con 31 core in esecuzione inattiva. Questo potrebbe essere fatto quando si implementa questo oggetto todo di 20 anni riscontrato nella fonte cron:

Tutti questi dovrebbero essere contrassegnati e limitati dal carico; cioè, invece di @hourly che significa "0 * * * *" dovrebbe significare "vicino all'inizio di ogni ora ma non fino a quando il carico del sistema è basso". (…) (Vix, gen90)

È molto facile scrivere @daily job1; job2qui. Se è importante che i lavori vengano eseguiti in ordine, renderlo una conseguenza diretta di ciò che scrivi.

Inoltre, rendere esplicito l'ordine rimuove il rischio che un futuro amministratore riordinerà le linee pensando che non avrà importanza.


5

http://ss64.com/osx/crontab.html (così come altri riferimenti) afferma che @daily è equivalente a

0 0 * * *

che dice di correre a mezzanotte. Mi aspetto che due linee di questo tipo vengano entrambe lanciate il più vicino possibile a mezzanotte, senza alcuna garanzia su quale verrebbe eseguita per prima. Sono d'accordo con il suggerimento di jw013 nel suo commento:

Il fatto che sia sotto-specificato di solito significa che è lasciato all'implementazione, ed è generalmente meglio non dipendere da tale comportamento. Probabilmente è più pulito e meglio organizzato per inserire una sequenza di lavori in cui la sequenza è importante nel proprio script anziché come voci crontab separate.


Questo aiuta, grazie. Sono d'accordo che il suggerimento di @ jw013 sia valido, ma non è questa la domanda che ho posto. Immagino che dovrò consultare la fonte effettiva per la risposta definitiva, dato che questo è probabilmente, in effetti, specifico per l'implementazione.
Adam Monsen,

0

Il commento di @Giles sull'uso di un singolo script durante l'importazione per eseguire le cose in ordine è appropriato.

cron.dailyi file non specificano i tempi di esecuzione. È stata la mia esperienza che corrono in serie. Questo ha senso come molti lavori in background che potrebbero essere eseguiti su un laptop o un altro sistema

Quando vengono specificati gli orari, vengono eseguiti tutti i lavori pianificati per il minuto corrente. È una buona idea usare tempi diversi.

Se si dispone di lavori che si escludono a vicenda, è comune utilizzare un file di blocco per determinare se l'altro lavoro è in esecuzione.


@dailyè leggermente diverso da /etc/cron.daily. La prima è una sintassi alternativa per l'uso in un crontab. Dai anche un'occhiata a run-parts. Il mio sistema utilizza run-partsper eseguire i programmi /etc/cron.daily. Secondo la run-parts(8)manpage, "I file vengono eseguiti nell'ordinamento lessicale dei loro nomi ...".
Adam Monsen,
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.