cron lavori con lo stesso tempo di esecuzione


8

Supponiamo che io abbia diversi processi cron impostati per essere eseguiti contemporaneamente: vengono eseguiti in parallelo o uno dopo l'altro?

(Il mio caso è Debian squeeze con cronjobs messo in /etc/cron.d/mycronjobs).

Risposte:


7

Per completezza, i lavori in es. /Etc/cron.{hourly,daily,weekly,monthly} vengono eseguiti in sequenza. Lo script run-parts scorre su tutti i file in questa directory.

02 4 * * * root run-parts /etc/cron.daily

Quindi puoi usarlo in combinazione con una convenzione di denominazione (simile alla numerazione /etc/init.d/rc*.dper esempio) per assicurarti che i lavori vengano eseguiti in sequenza.


Cosa succede se ho più lavori cron all'interno dello stesso file, impostato per essere eseguito contemporaneamente?
Gabriele,

Non sono sicuro di cosa intendi per "all'interno dello stesso file". Ma se intendi che hai diverse righe con la stessa specifica temporale (come quelle che 0 * * * *hai pubblicato in precedenza), allora come altre hanno pubblicato, non esiste alcuna garanzia sull'ordine in cui verranno eseguite. Possono funzionare in parallelo su un sistema multi-core, AFAIK l'ordine in cui vengono eseguiti può anche essere diverso ogni giorno. La convenzione di denominazione che ho menzionato in combinazione con una parte di esecuzione o l'uso di uno script principale che chiama gli script di backup effettivi è l'unico modo per garantire che gli script vengano eseguiti in un ordine particolare.
Bram

Ok, quindi, poiché devo essere sicuro che i miei script verranno eseguiti uno dopo l'altro, penso che andrò per uno "script principale" attivato da un processo cron e chiamerò qualsiasi script all'interno dello script principale.
Gabriele,

5

Le attività elencate in cron verranno eseguite in parallelo, proprio come fanno normalmente i processi. Non esiste alcun modo per essere sicuri di quale verrà avviato per primo e nessun modo in cron per assicurarsi che l'attività A sia stata completata prima dell'avvio dell'attività B.


1
È possibile assicurarsi che l'attività A sia stata completata prima dell'avvio dell'attività B elencandoli sulla stessa riga e separandoli con un punto e virgola.
Nicholas

Ciò non significa che l'attività A sia stata completata correttamente. Forse potresti usare un &&, ma qualsiasi cosa del genere dovrebbe essere eseguita da uno script chiamato.
Sirch,

È possibile utilizzare qualsiasi operando supportato dalla shell bash. Utilizzando &&, || o; in cron è pratica comune nella mia esperienza.
Nicholas

2

Cron è un demone (servizio) che gira continuamente; tuttavia, legge i crontab una volta al minuto.

L'esatta sequenza in cui vengono eseguiti i lavori dipenderà dall'implementazione del limite dei sistemi.

I file sciolti che alcune distribuzioni inseriscono in /etc/cron.d/ vengono scansionati per le loro impostazioni del cron timer, poiché questi file seguono la normale sintassi crontab (5).

L'ordine in cui vengono eseguiti i singoli lavori dipende ovviamente dalla pianificazione impostata per essi.


E se la pianificazione fosse impostata in questo modo: ---- 0 * * * * root sh / var / opt / backup_scripts / backup1 - 0 * * * * root sh / var / opt / backup_scripts / backup2 ---- Saranno eseguire in sequenza, ovvero backup1 e, al termine, backup2?
Gabriele,

L'esatta sequenza in cui vengono eseguiti i lavori dipenderà dall'implementazione del limite dei sistemi. man cron per i dettagli.
adattamento

man cron non dice nulla al riguardo (almeno in Debian).
Gabriele,

2

Correranno in parallelo. È possibile utilizzare i seguenti metodi per eseguire i processi in sequenza.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
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.