Come pianificare le attività in Linux con Cron e Crontab

La capacità di automatizzare le attività è una di quelle tecnologie futuristiche che è già qui. Ogni utente Linux può trarre vantaggio dal sistema di pianificazione e dalle attività dell'utente, grazie a cron, un servizio di background facile da usare.

La capacità di automatizzare le attività è una di quelle tecnologie futuristiche che è già qui.  Ogni utente Linux può trarre vantaggio dal sistema di pianificazione e dalle attività dell'utente, grazie a cron, un servizio di background facile da usare.
Annuncio pubblicitario

Sapevi che Blade Runner è ambientato nel 2019? Sono passati tre anni! Per non parlare di Ritorno al futuro 2, dove viaggiano nel tempo fino al 2015. Ma non abbiamo macchine volanti e non ci sono repliche tra di noi (per quanto ne so).

linux-cron-job-citazione

È facile sentirsi delusi dalla tecnologia attuale quando lo paragoniamo alle rappresentazioni immaginarie del futuro. Eppure, in questi giorni i nostri telefoni, computer e persino case possono fare cose stupefacenti 5 Progetti di automazione domestica fai-da-te per iniziare la tua Smart Home 5 Progetti di automazione domestica fai-da-te per iniziare la tua Smart Home Quando si tratta di creare case intelligenti, la maggior parte delle persone solo non so da dove cominciare. Qui ci sono cinque progetti base per principianti che puoi costruire in questo momento. Leggi di più . La capacità di automatizzare le attività è una di queste.

Ogni utente Linux può trarre vantaggio dalle attività di pianificazione, indipendentemente dal fatto che siano correlate al sistema (come la pulizia dei vecchi registri e l'aggiornamento dei pacchetti Come aggiornare One o Tutte le app su Linux in secondi Come aggiornare una o tutte le app su Linux in secondi Il terminale Linux semplifica l'aggiornamento di una singola app sul tuo computer o applica tutti gli aggiornamenti disponibili contemporaneamente. Ecco come, per saperne di più) o per servire l'utente (controllare la posta elettronica, scaricare i podcast ...). Gli utenti di Windows hanno avuto l'Utilità di pianificazione 4 Attività noiose che è possibile automatizzare con l'Utilità di pianificazione di Windows 4 Attività noiose che è possibile automatizzare con l'Utilità di pianificazione di Windows Il tempo è troppo prezioso per essere sprecato con attività ripetitive. Lascia che ti mostriamo come automatizzare e pianificare le attività. Abbiamo anche alcuni grandi esempi. Leggi di più da Windows 95. L'utility che fa lo stesso lavoro su Linux si chiama cron, e qui spiegheremo come usarla.

Cos'è Cron?

Cron è un servizio di sistema che viene eseguito in background, controlla le attività pianificate e le esegue se ne trova. Le attività - chiamate anche "job di cron 5 Idee di impostazione per principianti Linux per lavori di Cron e script di shell 5 Idee per l'installazione di Linux principianti per lavori di Cron e script di shell Con bash scripting, è possibile eseguire una serie complessa di attività in un solo passaggio, quindi è ideale per esigenze elaborate e ripetitive. È anche un ottimo modo per conoscere il terminale. Leggi altro "- sono definiti in speciali file di configurazione (crontabs), che cron scansiona ogni minuto. Diverse versioni di cron possono essere trovate su diverse distribuzioni Linux. Ad esempio, il fork di cron di Fedora si chiama cronie, e ci sono anche fcron, bcron e dcron. Alcuni hanno funzionalità extra, mentre altri sono più focalizzati sulla sicurezza, ma sono tutti basati sulla stessa idea.

Questa guida è scritta per vixie-cron, che è la versione più diffusa di cron e quella che troverete su Ubuntu e le sue derivate. Sebbene la maggior parte delle istruzioni si applichino anche ad altre implementazioni di cron, potrebbero esserci piccole differenze, quindi controlla i loro manuali se decidi di cambiare.

Cos'è un Crontab?

Se sei seriamente intenzionato a gestire il tuo tempo, probabilmente hai un calendario di qualche tipo Organizza il tuo tempo con queste 4 app per il calendario Linux Organizza il tuo tempo con queste 4 app per il calendario Linux Ha senso usare ancora un'app per il calendario? Lo pensiamo, soprattutto per consentire l'accesso agli eventi su qualsiasi dispositivo sincronizzato. Queste app di calendario Linux sono particolarmente utili. Ulteriori informazioni: un'app o almeno un pezzo di carta. Crontab è molto simile al calendario del tuo computer. Contiene le informazioni sulle attività pianificate, comunicando a cron quali comandi eseguire a che ora.

In effetti, molti crontabs sono sul tuo sistema. Ogni utente ha il proprio crontab, incluso root (l'amministratore). I crontabs utente sono memorizzati in /var/spool/cron/crontabs/ . Il comando crontab -l elencherà il file crontab per l'utente corrente. Puoi controllare il crontab di root con sudo crontab -l .

Inoltre, c'è il file crontab di sistema /etc/crontab che viene utilizzato per le attività a livello di sistema. Solitamente, assumono la forma di script eseguibili, di root, collocati in /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ e /etc/cron.monthly/ folders, e su alcune distribuzioni, anche la cartella /etc/cron.d/ . In generale, non dovresti avere a che fare con queste attività, poiché la maggior parte di esse viene creata automaticamente dalle applicazioni installate.

Come pianificare le attività con Cron

Sembra semplice: per pianificare le attività, aggiungili al tuo crontab. Poiché crontab è un file di configurazione speciale, non è consigliabile modificarlo manualmente. Invece, usa il comando crontab -e . Per modificare i crontabs di root o di altri utenti, esegui il comando con privilegi amministrativi e aggiungi il loro nome utente dopo l'opzione -u:

sudo crontab -u root -e
sudo crontab -u username -e

linux-cron-job-crontab-editore

Il file crontab ha due sezioni. Il primo contiene le variabili di ambiente che vengono impostate automaticamente. È possibile modificare in modo sicuro le variabili PATH, HOME e SHELL e modificare la variabile MAIL.

La seconda parte del file è l'effettivo "orario" con le attività pianificate. Ogni attività occupa una riga (riga) nella tabella, con colonne che rappresentano i seguenti valori:

linux-cron-job-crontab

Per pianificare correttamente le attività, è necessario conoscere un po 'della sintassi crontab:

  • I numeri devono essere numeri interi (numeri interi) e puoi usare l'asterisco (*) in qualsiasi colonna come carattere jolly, che significa "ogni minuto / giorno / mese ...".
  • Nella colonna "Giorno del mese", fai attenzione a non impostare una data che non si verifica nel mese specificato nella colonna "Mese" (ad esempio, il 30 febbraio).
  • Entrambe le colonne "Mese" e "Giorno della settimana" accettano rispettivamente i nomi brevi per i mesi e i giorni, senza distinzione tra maiuscole e minuscole.
  • Nella colonna "Giorno della settimana", sia lo 0 che il 7 si riferiscono alla domenica. La colonna "Ora" richiede il formato "orario militare" (24 ore), ma non è possibile utilizzare il numero 24 - invece, 0 indica 12 ore Questo perché i valori per minuto, ora e giorno della settimana iniziano da 0 invece di 1.
  • I secondi non sono supportati, quindi non è possibile pianificare un'attività in un secondo particolare.

Quello che puoi fare è pianificare intervalli di tempo compresi usando un trattino (14-22 in "Ore" eseguirà l'attività ininterrottamente dalle 14:00 alle 22:00), oppure esegui una singola operazione più volte definendo un elenco separato da virgole (1, 3, 5 in "Giorno della settimana" eseguirà l'attività lunedì, mercoledì e venerdì).

Nel frattempo, i valori dei passaggi, sono rappresentati da una barra (/), e indicano la quantità di salti in un intervallo; ad esempio, 3-20 / 3 in "Ore" eseguirà l'attività ogni tre ore dalle 3:00 alle 20:00. È utile quando si desidera ripetere attività ogni X ore, poiché è possibile combinare un asterisco e un passaggio (* / X). È possibile combinare intervalli con elenchi e passaggi con intervalli purché si utilizzino numeri. In altre parole, combinazioni come "jan-mar" o "Tue, Fri-Sun" non sono consentite.

In alternativa, invece di impostare un valore per ogni colonna, è sufficiente scrivere @weekly, @yearly, @monthly, @daily o @hourly all'inizio di una riga, seguito da un comando. Programmato in questo modo, le attività verranno eseguite alla prima istanza possibile, quindi @weekly eseguirà a mezzanotte il primo giorno della settimana. Se si desidera eseguire un'attività immediatamente all'avvio del sistema (ri), utilizzare il comando @reboot.

linux-cron-job-crontab-example

In questo esempio, abbiamo programmato un backup ogni giorno alle 08:20 e alle 20:20. Lo sfondo cambia automaticamente ogni tre giorni alle 19:00 e uno script controlla i nuovi podcast Le 10 migliori app per la gestione dei podcast su Linux Le 10 migliori app per la gestione dei podcast su Linux Linux non ha una grande scelta di client podcast, ma non preoccuparti: quasi tutti i lettori di musica moderna per Linux possono fungere da podcatcher. Diamo un'occhiata alle opzioni. Leggi di più ogni lunedì alle 10:20 e alle 20:20. Un promemoria per il compleanno è impostato per il 25 marzo e viene eseguito ogni 30 minuti entro il periodo di tempo specificato. Infine, uno script controlla la posta ogni 15 minuti dalle 8 alle 20, ma solo nei giorni lavorativi. Sei libero di organizzare il tuo crontab con spazi e tabulazioni tra le colonne, ma non all'interno di essi (non inserire spazi tra virgole, trattini e barre).

Se tutto ciò sembra troppo complicato, non preoccuparti: puoi sempre fare affidamento su Internet. Strumenti come Crontab Generator, Crontab.guru e Corntab consentono di creare processi cron senza conoscere alcuna sintassi crontab. Mostrano quando verrà eseguito il lavoro successivo e forniranno modelli per espressioni di uso comune. Crontab.guru è il migliore del gruppo perché consente di testare la sintassi crontab in tempo reale, in modo da poter vedere immediatamente come le modifiche influenzeranno la pianificazione.

linux-cron-job-crontab-guru

Come verificare se i lavori cron sono eseguiti

Cron dovrebbe funzionare silenziosamente in background e lasciarti lavorare indisturbato mentre si prende cura dei tuoi compiti. Ma come puoi assicurarti che funzioni davvero?

Cron ha una funzione di notifica e-mail integrata, ma richiede almeno un semplice server di posta locale. Come funziona un server di posta elettronica? [Tecnologia spiegata] Come funziona un server di posta elettronica? [Tecnologia spiegata] Dietro ogni e-mail c'è un potente motore chiamato server e-mail che invia le e-mail attraverso Internet. Leggi di più . Non molti utenti domestici sono disposti a configurarlo e non molte distribuzioni lo forniscono per impostazione predefinita (ad esempio, Ubuntu no). Il modo più veloce per controllare su cron è eseguire la scansione del registro di sistema con questo comando:

cat /var/log/syslog | grep -i cron

linux-cron-job-log

L'opzione -i rende la nostra query senza distinzione tra maiuscole e minuscole. È possibile che cron abbia il proprio file di registro da qualche parte in /var/log/, quindi guarda lì se questo comando non riesce a produrre risultati utili.

Se è necessario salvare l'output di un particolare lavoro cron, è possibile reindirizzare a un file. Fornisci il percorso e il nome del file nell'ultima colonna di crontab, dopo il comando che vuoi eseguire:

30 * * * * /usr/bin/yourcommand>/home/username/logfile.txt

L'uso di un singolo simbolo> sovrascrive il file ogni volta che viene eseguito il comando. Per evitare ciò, usare >> invece - aggiunge l'output al file esistente.

Cosa succede se Cron non funziona?

Potrebbe succedere che tu abbia aggiunto alcune attività, controllato i log di sistema e scoperto che non stanno eseguendo come dovrebbero. Ecco alcune cose che dovresti prendere in considerazione - e fare attenzione - quando cerchi di risolvere il problema.

Il servizio cron è in esecuzione?

Come sai, il demone cron dovrebbe essere in esecuzione in background. Assicurati che questo sia davvero il caso. Il servizio è chiamato crond o solo cron.

Per le distribuzioni usando systemd:

systemctl status cron

Per le distribuzioni utilizzando Upstart:

service cron status

linux-cron-job-service-status

Se la tua distribuzione utilizza il "vecchio" approccio System V init, elenca tutti i servizi con:

initctl list

e vedere se cron è elencato.

Ti è addirittura permesso avere un file crontab?

Controlla la cartella /etc per i file cron.allow e cron.deny . Su Ubuntu, nessuno dei due dovrebbe esistere, il che significa che tutti gli utenti possono gestire i lavori cron. Tuttavia, se esiste un file cron.allow, deve contenere il tuo nome utente. Viceversa, se il file cron.deny esiste, il tuo nome utente non dovrebbe esserci. Lasciare vuoto il file cron.deny significa che solo root e gli utenti elencati in cron.allow possono avere file crontab.

Le tue variabili sono impostate correttamente?

Crontab imposta automaticamente la tua variabile SHELL su /bin/sh . Tuttavia, se il tuo guscio preferito è il pesce 7 Motivi per cui dovresti installare la conchiglia di pesce 7 Ragioni per cui dovresti installare la conchiglia di pesce Non ti piace come funziona il tuo terminale Linux? Perché non installare una nuova shell? Uno di questi è il pesce, che introduce caratteristiche che avrebbero dovuto diventare comuni, ma non lo erano. Diamo un'occhiata. Leggi di più o bash, dovresti cambiare la variabile SHELL . Allo stesso modo, la variabile PATH contiene solo poche directory per impostazione predefinita. Qui è dove crontab cerca i comandi di Linux. Se il tuo cron job non sta funzionando, potrebbe essere perché crontab non "vede" il comando che hai usato. Per evitare ciò, aggiungi le directory contenenti i comandi alla variabile PATH, separate da due punti:

PATH=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Se non vuoi modificare questo nel tuo crontab, puoi definire queste variabili nello script che vuoi eseguire come cron job.

La tua formattazione di crontab è puntuale?

La sintassi di Crontab non è esattamente scorrevole. Anche se lo verifichi con gli strumenti online menzionati in precedenza, un errore minore potrebbe comunque impedire a cron di eseguire i tuoi lavori. Fai attenzione a:

  • aggiungi una riga vuota alla fine del file crontab
  • sfuggire al segno% con una barra rovesciata se il comando lo include
  • scrivi commenti come linee separate che iniziano con #. Non scrivere commenti sulla stessa riga delle variabili di ambiente o accanto ai comandi di cron job.

Dovresti davvero usare il terminale?

Assolutamente no. Gli utenti di KDE possono pianificare i lavori cron con KCron, che è accessibile dal modulo Impostazioni di sistema> Utilità di pianificazione . Con un'interfaccia semplice che ti permette di scegliere e modificare tutto in pochi clic del mouse, KCron è un piacere da usare.

linux-cron-job-kcron

Se preferisci GNOME, allora GNOME Schedule fa per te. L'approccio è simile, sebbene l'interfaccia sia, presumibilmente, leggermente diversa. Offre una modalità avanzata per le modifiche a grana fine e viene fornito con un'applet del pannello da cui è possibile gestire le attività direttamente.

linux-cron-job-gnome-schedule

Dovresti essere a conoscenza di altre soluzioni, come Crontab-UI e Minicron. Sono più adatti agli utenti che gestiscono più macchine e lavori cron e una delle loro funzionalità più interessanti è l'interfaccia basata sul Web.

linux-cron-job-crontabui

Ci sono delle alternative Cron?

Mentre cron è più o meno il normale task scheduler per Linux Pianifica e automatizza le attività in Linux con Gnome Pianifica e automatizza le attività in Linux Con Gnome Pianifica Leggi di più, non è certo l'unico. Il comando at è perfetto per i lavori rapidi, che possono essere programmati direttamente dalla riga di comando, senza file di configurazione speciali. Se hai bisogno di più, c'è GNUbatch, che introduce la nozione di dipendenza. Con GNUbatch, è possibile impostare condizioni specifiche per ogni lavoro o eseguire un'attività pianificata in base a una precedente. Qualcosa di simile può essere ottenuto con i timer di sistema. Sebbene sia meno pratico da configurare rispetto a cron, i timer systemd possono ricordare se un task ha saltato la sua pianificazione mentre il computer era spento ed eseguirlo la prossima volta che è attivo.

Questo è qualcosa che cron non può fare da solo. In quanto tale, è adatto a server e computer che sono costantemente in esecuzione, ma non eseguirà un lavoro pianificato mentre il computer era spento. È qui che entra in gioco l'anacron. Tecnicamente non è una "alternativa" o una sostituzione per cron. Anacron, invece, integra cron e dovrebbe essere usato insieme ad esso, il che è il caso di molte distribuzioni Linux, inclusi i prodotti basati su Ubuntu e Ubuntu. Anacron registra quando un compito è stato eseguito l'ultima volta e controlla se ci sono state delle istanze perse mentre il sistema è stato spento. Li eseguirà quando riaccendi il computer, ma ogni attività può essere eseguita solo una volta al giorno.

Alcune versioni di cron, come fcron, offrono le funzionalità di anacron per impostazione predefinita. Gli utenti esperti potrebbero voler guardare Hcron o SuperCron, che apportano molti miglioramenti alle funzioni di cron di base, ma sono anche piuttosto difficili da gestire.

E tu? Come organizzi le tue attività digitali? Quali attività pianifichi su Linux? Condividi le tue storie e i tuoi consigli per l'utilizzo di cron nei commenti.

Immagine di credito: scheda di programma da Gonzalo Aragon via Shutterstock

In this article