Cron è un demone di pianificazione che esegue lavori cron a intervalli specificati. I lavori Cron automatizzano la manutenzione del sistema, attività ripetitive o di amministrazione come backup di database o dati, aggiornamenti di sistema, controllo dell'utilizzo dello spazio su disco, invio di e-mail e così via.
Puoi pianificare l'esecuzione dei processi cron in base al minuto, all'ora, al giorno della settimana, al giorno del mese, al mese o qualsiasi combinazione di questi.
Perché Cron?
- Cron ti dà il controllo sull'esecuzione del tuo lavoro o attività. Ad esempio, puoi controllare il minuto, l'ora, il giorno, ecc. di esecuzione
- I lavori Cron non occupano memoria quando non sono in esecuzione.
- Elimina la necessità di scrivere cicli e codice logico per l'attività.
- Se un lavoro non viene eseguito per qualche motivo, verrà eseguito nuovamente all'intervallo di tempo successivo.
Installa ed esegui il demone cron
L'utilità cron in Linux viene installata con il pacchetto cronie che fornisce i servizi cron.
Controlla se il pacchetto cronie è installato o meno.
[tuts@fosslinux ~]$ rpm -q cronie cronie-1.5.7-1.fc33.x86_64
Se il pacchetto cronie non è presente, installalo usando il seguente comando per gli utenti Fedora.
[tuts@fosslinux ~]$ sudo dnf install cronie
Prima di pianificare qualsiasi attività, è necessario avviare il servizio crond (cron daemon).
Controlla se il servizio crond è in esecuzione o meno.
[tuts@fosslinux ~]$ systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre> Active: active (running) since Tue 2021-06-08 09:14:40 EAT; 2h 58min ago Main PID: 1671 (crond) Tasks: 1 (limit: 3448) Memory: 14.4M CPU: 316ms CGroup: /system.slice/crond.service └─1671 /usr/sbin/crond -n
Il servizio è in esecuzione se il comando indica ( Attivo:attivo (in esecuzione). Se il servizio crond non è in esecuzione, avviarlo nella sessione corrente con il comando seguente.
[tuts@fosslinux ~]$ systemctl start crond.service
Puoi anche configurare il servizio per l'avvio e l'esecuzione automatica all'avvio con il comando seguente.
[tuts@fosslinux ~]$ systemctl enable crond.service
Puoi interrompere l'esecuzione del servizio crond utilizzando il comando stop.
[tuts@fosslinux ~]$ systemctl stop crond.service
Puoi anche riavviarlo di nuovo con il comando di riavvio:
[tuts@fosslinux ~]$ systemctl restart crond.service
Definisci un lavoro cron
Per capire come funzionano i lavori cron, esamineremo un esempio di lavoro cron e le parti che compongono un file di configurazione crontab.
Esempio:un lavoro cron per estrarre le ultime modifiche di un ramo git master.
*/55 * * * * username cd /home/username/project/shop_app && git pull origin master
Il lavoro cron sopra è composto da due parti chiave:
- La prima parte (*/55 * * * * ) imposta l'esecuzione del timer ogni 55 minuti.
- La seconda parte della configurazione del lavoro cron definisce le istruzioni come verrebbero eseguite dalla riga di comando. Il comando verrà eseguito come utente (nome utente), quindi cambierà la directory in (/home/nomeutente/project/shop_app). L'ultima parte eseguirà il comando git per estrarre le ultime modifiche nel ramo principale del tuo progetto.
Utilizzo di crontab per creare un cron job
Come regola guida, non dovresti modificare direttamente i file cron. Invece, usa il comando crontab per creare, modificare, installare, disinstallare o elencare i lavori cron in esecuzione nel tuo sistema. Una volta definiti i lavori cron, questi verranno eseguiti in background e il demone verificherà costantemente la presenza di nuovi lavori cron nel file /etc/crontab, /etc/cron.*/ e /var/spool/cron/ directory.
Le distribuzioni basate su RedHat come Fedora archiviano i file crontab nella directory /var/spool/cron, mentre le distribuzioni Debian e Ubuntu nella directory /var/spool/cron/crontabs. I file crontab e gli script a livello di sistema sono archiviati rispettivamente nel file etc/crontab e nella directory /etc/cron.d.
Nota che non è necessario riavviare cron dopo aver creato nuovi file di configurazione o aver modificato quelli esistenti.
Sintassi e operatori dell'ora Crontab
La prima parte di una definizione di lavoro cron è l'informazione di temporizzazione. Determina quando e con quale frequenza verrà eseguito il lavoro cron. Consiste di minuti, ore, giorni del mese, mese, giorno della settimana in quest'ordine. Puoi specificare uno o più valori separati da una virgola o da un trattino.
.---------------- minute (0 - 59) | .------------- hour (0 - 23) | | .---------- day of month (1 - 31) | | | .------- month (1 - 12) OR jan,feb,mar,apr … | | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thr,fri,sat | | | | | | | | | | * * * * * username cron job command to be executed
- * – È possibile utilizzare un asterisco al posto di un valore per rappresentare tutti i valori possibili per quella posizione durante la definizione del tempo di esecuzione. Ad esempio, se utilizzi un asterisco nella posizione dei minuti, il processo cron verrà eseguito ogni minuto.
- – Una virgola specifica un elenco di valori per la ripetizione. Ad esempio, se specifichi 2, 3, 6 nel campo Ora, il processo cron verrà eseguito alle 2:00, 3:00 e 6:00.
- – – Il trattino specifica un intervallo di valori. Ad esempio, se hai 2-6 nel campo del giorno della settimana, il processo cron verrà eseguito ogni giorno della settimana dal martedì al sabato.
- / – L'operatore slash specifica i valori che verranno ripetuti in un determinato intervallo. Ad esempio, */6 nel campo dell'ora indica che il lavoro cron verrà eseguito ogni sei ore. È simile a specificare 0,6,12,18.
Macro predefinite
Cron ha diverse macro di pianificazione speciali che puoi utilizzare per specificare intervalli comuni. Puoi usarli al posto delle specifiche di data e ora.
- @reboot – L'attività specificata viene eseguita all'avvio del sistema.
- @yearly o @annually:l'attività specificata viene eseguita una volta all'anno il 1° gennaio a mezzanotte. È simile a 0 0 1 1 *.
- @monthly – L'attività viene eseguita una volta al mese il primo giorno del mese a mezzanotte. È simile a 0 0 1 * *.
- @weekly -L'attività specificata viene eseguita una volta alla settimana a mezzanotte di domenica. È equivalente a 0 0 * * 0.
- @daily – L'attività specificata viene eseguita una volta al giorno a mezzanotte. Equivale a 0 0 * * *.
- @hourly – L'attività viene eseguita una volta ogni ora all'inizio dell'ora. È simile a 0 * * * *.
Comando Crontab
Il comando crontab ti consente di installare, aprire o visualizzare un file crontab.
Crea un file crontab o aprine uno esistente con il seguente comando:
$ crontab -e
Il comando aprirà l'editor vi per impostazione predefinita e ti consentirà di definire i lavori cron che desideri eseguire nel tuo sistema.
Elenca tutti i lavori cron nel tuo sistema e mostra il contenuto del file crontab:
$ crontab -l
Elenca i lavori cron per un utente specifico usando l'opzione -u:
$ crontab -u username -l
Rimuovi tutti i lavori cron usando il comando -r:
$ crontab -r
Rimuovere i lavori cron per un utente specifico con il comando -r -u come utente root:
$ crontab -r -u username
Rimuovere il file crontab corrente con un prompt prima della rimozione.
$ crontab -i
Variabili di Crontab
- PATH=/usr/bin:/bin è il percorso crontab predefinito. Tuttavia, puoi definire un percorso per il comando che stai eseguendo o modificare la variabile cron $PATH.
- bin/sh è la shell predefinita.
- L'ambiente MAILTO definisce il proprietario del crontab per l'invio di notifiche e-mail. Puoi aggiungere alla variabile un elenco separato da virgole di tutti gli indirizzi e-mail per ricevere le notifiche e-mail. Nota che non verranno inviate email se la variabile MAILTO è vuota (ad esempio MAILTO=” “).
Esempi di lavori Cron
Il seguente processo cron verrà eseguito ogni minuto:
* * * * * [cron job command]
Il seguente processo cron verrà eseguito sei volte all'ora, ovvero ogni 10 minuti:
*/10 * * * * [cron job command]
Esegui uno script ogni mezz'ora e reindirizza l'output a "/home/tuts/Documents":
[email protected] */30 * * * * /path/to/homescript.sh > /home/username/Documents
Usa l'operatore &&per eseguire due comandi ogni venerdì alle 8:00:
0 8 * * Fri commandA && commandB
Esegui un comando una volta al mese, il quinto giorno del mese alle 2:00:
( cioè 5 marzo 2:00, 5 aprile 2:00, 5 dicembre 2:00, etc):
0 2 5 * * [cron job command]
Esegui uno script alle 10:30, il 3 e il 23 di ogni mese:
30 10 3,23 * * /path/to/fosslinuxscript.sh
Utilizzare il comando seguente per impostare le variabili HOME, PATH, SHELL e MAILTO personalizzate ed eseguire un comando ogni minuto.
HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * [cron job command]
Suggerimenti per la pianificazione
Il compito di pianificare i lavori cron può essere impegnativo e scoraggiante con l'aumento del numero di lavori. I lavori Cron eseguiti contemporaneamente, soprattutto negli ambienti di produzione, possono creare seri problemi di prestazioni. Ad esempio, i backup e le compilazioni di sistema eseguiti contemporaneamente consumano molte risorse di sistema e il sistema potrebbe esaurire la RAM. Un modo per aggirare una tale sfida è programmare attività che richiedono molte risorse in diversi momenti della giornata, della settimana o del mese. Puoi anche aggiungere più memoria al tuo sistema o rimuovere attività scritte male che utilizzano una grande quantità di memoria.
Un'altra sfida sorge quando il computer viene spento durante un periodo in cui è pianificata l'esecuzione di un processo cron. Di conseguenza, il processo cron non verrà eseguito fino alla prossima esecuzione pianificata. Ciò potrebbe creare problemi, specialmente se il lavoro cron è fondamentale per il tuo sistema. Fortunatamente, Linux fornisce il programma anacron, che offre agli utenti la possibilità di pianificare i lavori cron a intervalli regolari. Scopri di più dalle pagine man di anacron.
Limitazione dell'accesso a cron
Cron fornisce un modo per controllare quali utenti regolari del sistema hanno accesso al comando crontab. È determinante nel limitare gli errori che potrebbero causare il sovraccarico di risorse di sistema come la memoria. Per prevenire possibili usi impropri, utilizzare i file /etc/cron.deny e /etc/cron.allow per controllare l'accesso degli utenti. Puoi aggiungere un nome utente a entrambi i file per negare o consentire l'accesso.
È importante limitare l'accesso ai lavori cron e al comando crontab da parte di utenti non root.
Conclusione
Cron è uno strumento principalmente per gli amministratori di sistema, ma è anche rilevante per molte attività degli utenti. Ad esempio, utilizzo cron per pianificare attività noiose come i backup e nelle applicazioni Web.
Trovo che le pagine man di cron, crontab e anacron siano utili e ricche di risorse con informazioni e suggerimenti.