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.