Come pianificare le attività in Linux con Cron e Crontab

Come pianificare le attività in Linux con Cron e Crontab

Lo sapevi Blade Runner è ambientato nel 2019? Sono tre anni da adesso! Per non parlare di Ritorno al futuro 2 , dove viaggiano nel tempo fino al 2015. Eppure non abbiamo macchine volanti e non ci sono replicanti tra di noi (per quanto ne so).





È facile sentirsi delusi dalla tecnologia attuale quando la confrontiamo con le rappresentazioni immaginarie del futuro. Tuttavia, in questi giorni i nostri telefoni, computer e persino le nostre case possono fare cose incredibili. La capacità di automatizzare le attività è una di queste.





Ogni utente Linux può trarre vantaggio dalle attività di pianificazione, siano esse relative al sistema (come la pulizia di vecchi registri e aggiornamento dei pacchetti ) o al servizio dell'utente (controllo della posta elettronica, download di podcast...). Gli utenti Windows hanno l'Utilità di pianificazione da Windows 95. L'utility che fa lo stesso lavoro su Linux si chiama cron, e qui spiegheremo come usarla.





come essere anonimi su facebook

Cos'è Cron?

Cron è un servizio di sistema che viene eseguito in background, verifica le attività pianificate e le esegue se ne trova. Le attività, chiamate anche 'cron job', sono definite in speciali file di configurazione (crontab), che cron scansiona ogni minuto. Diverse versioni di cron possono essere trovate su diverse distribuzioni Linux. Ad esempio, il fork di cron di Fedora è chiamato amico , 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 troverai su Ubuntu e le sue derivate. Sebbene la maggior parte delle istruzioni si applichi anche ad altre implementazioni di cron, potrebbero esserci piccole differenze, quindi controlla i loro manuali se decidi di cambiare.



Che cos'è un Crontab?

Se sei seriamente intenzionato a gestire il tuo tempo, probabilmente hai un calendario di qualche tipo: un'app o almeno un pezzo di carta. Crontab è molto simile al calendario del tuo computer. Contiene le informazioni sulle attività pianificate, dicendo a cron quali comandi eseguire a che ora.

In effetti, nel tuo sistema sono presenti diversi crontab. Ogni utente ha il proprio crontab, incluso root (l'amministratore). I crontab utente sono memorizzati in





/var/spool/cron/crontabs/

. Il

crontab -l

comando 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 attività a livello di sistema. Di solito, assumono la forma di script eseguibili di proprietà di root inseriti in

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, e

/etc/cron.monthly/

cartelle, e su alcune distribuzioni, il

/etc/cron.d/

anche cartella. 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à, aggiungile al tuo crontab. Poiché crontab è un file di configurazione speciale, non è consigliabile modificarlo manualmente. Invece, usa il

crontab -e

comando. Per modificare i crontab di root o di altri utenti, esegui il comando con privilegi di amministratore e aggiungi il loro nome utente dopo l'opzione -u:

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

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

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

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

  • I numeri devono essere interi (numeri interi) ed è possibile utilizzare l'asterisco (*) in qualsiasi colonna come carattere jolly, il che significa 'ogni minuto/giorno/mese...'.
  • Nella colonna 'Giorno del mese', fare 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 nomi brevi rispettivamente per mesi e giorni e non fanno distinzione tra maiuscole e minuscole.
  • Nella colonna 'Giorno della settimana', sia 0 che 7 stanno per domenica. La colonna 'Ora' richiede il formato 'orario militare' (24 ore), ma non è possibile utilizzare il numero 24 -- invece, 0 sta per 12 am Questo perché i valori per minuto, ora e giorno della settimana iniziano a 0 invece di 1.
  • I secondi non sono supportati, quindi non puoi pianificare un'attività in un determinato secondo.

Quello che puoi fare è pianificare intervalli di tempo inclusivi utilizzando un trattino (14-22 in 'Ore' eseguirà l'attività continuamente dalle 14:00 alle 22:00) o eseguirà una singola attività 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 degli step sono rappresentati da una barra (/) e indicano la quantità di salti all'interno di un intervallo; ad esempio, 3-20/3 in 'Ore' eseguirà l'attività ogni tre ore dalle 3:00 alle 20:00. Questo è utile quando vuoi ripetere le attività ogni X ore, perché puoi combinare un asterisco e un passaggio (*/X). Puoi combinare intervalli con elenchi e passaggi con intervalli purché utilizzi numeri. In altre parole, non sono consentite combinazioni come 'jan-mar' o 'mar,ven-dom'.

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

In questo esempio, abbiamo pianificato un backup ogni giorno alle 08:20 e alle 20:20. Lo sfondo cambia automaticamente ogni tre giorni alle 19:00 e uno script verificherà la presenza di nuovi podcast ogni lunedì alle 10:20 e alle 20:20. Un promemoria di compleanno è impostato per il 25 marzo e viene eseguito ogni 30 minuti entro l'intervallo di tempo specificato. Infine, uno script controlla la posta ogni 15 minuti dalle 8 alle 20, ma solo nei giorni feriali. Sei libero di organizzare il tuo crontab con spazi e tab tra le colonne, ma non al loro interno (non inserire spazi tra virgole, trattini e barre).

Se tutto questo sembra troppo complicato, non preoccuparti: puoi sempre fare affidamento su Internet. Strumenti come Generatore Crontab , Crontab.guru e Corntab ti aiutano a creare lavori cron senza conoscere alcuna sintassi crontab. Ti mostrano quando il lavoro verrà eseguito successivamente e forniscono modelli per le espressioni di uso comune. Crontab.guru è il migliore del gruppo perché ti consente di testare in tempo reale la sintassi di crontab, così puoi vedere immediatamente come le tue modifiche influenzeranno la pianificazione.

Come verificare se i lavori Cron vengono eseguiti?

Cron dovrebbe funzionare silenziosamente in background e farti lavorare indisturbato mentre si occupa delle tue attività. Ma come puoi assicurarti che funzioni davvero?

Cron ha una funzione di notifica e-mail integrata, ma ciò richiede l'impostazione di almeno un semplice server di posta locale. 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 cron è scansionare il registro di sistema con questo comando:

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

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 dentro

/var/log/

, quindi guarda lì se questo comando non riesce a produrre risultati utili.

Se hai bisogno di salvare l'output di un particolare cron job, puoi reindirizzarlo a un file. Fornisci il percorso e il nome del file nell'ultima colonna del tuo crontab, dopo il comando che vuoi eseguire:

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

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

Cosa succede se Cron non funziona?

Potrebbe succedere che tu abbia aggiunto alcune attività, controllato i registri di sistema e scoperto che non vengono eseguiti come dovrebbero. Ecco alcune cose che dovresti considerare e a cui prestare 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 sia davvero così. Il servizio si chiama crond o semplicemente cron.

Per le distribuzioni che utilizzano systemd:

systemctl status cron

Per le distribuzioni che utilizzano Upstart:

service cron status

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

accesso alla cartella negato Windows 10 è necessaria l'autorizzazione per eseguire questa azione
initctl list

e vedi se cron è elencato.

Hai anche il permesso di avere un file crontab?

Controlla il tuo

/etc

cartella per i file denominati

cron.allow

e

cron.deny

. Su Ubuntu, non dovrebbe esistere, il che significa che tutti gli utenti possono gestire i lavori cron. Tuttavia, se c'è un

creazione di un disco di avvio di Windows 7
cron.allow

file, deve contenere il tuo nome utente. Viceversa, se

cron.deny

file esiste, il tuo nome utente non dovrebbe essere in esso. Lasciando il

cron.deny

file vuoto significa che solo root e utenti elencati in

cron.allow

può 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 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 viene eseguito, 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 modificarlo nel tuo crontab, puoi definire queste variabili nello script che vuoi eseguire come cron job.

La formattazione del tuo crontab è corretta?

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

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

Devi davvero usare il terminale?

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

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

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

Ci sono alternative a Cron?

Mentre cron è praticamente l'utilità di pianificazione standard per Linux, non è certamente l'unico. Il al comando è perfetto per lavori rapidi e una tantum che possono essere pianificati 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, puoi impostare condizioni specifiche per ogni lavoro o fare in modo che un'attività pianificata dipenda da una precedente. Qualcosa di simile può essere ottenuto con timer di sistema . Sebbene meno pratici da configurare rispetto a cron, i timer di sistema possono ricordare se un'attività ha perso la sua pianificazione mentre il computer era spento ed eseguirla la prossima volta che è accesa.

Questo è qualcosa che cron non può fare da solo. In quanto tale, è adatto per server e computer costantemente in esecuzione, ma non eseguirà un lavoro pianificato mentre il computer era spento. Qui è dove anacron entra in gioco. Tecnicamente non è un''alternativa' o un sostituto di cron. Invece, anacron integra cron e dovrebbe essere usato insieme ad esso, come nel caso di molte distribuzioni Linux, inclusi Ubuntu e prodotti basati su Ubuntu. Anacron registra quando un'attività è stata eseguita l'ultima volta e controlla se ci sono state istanze perse mentre il sistema era 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 avanzati potrebbero voler guardare Hcron o SuperCron , che apportano molti miglioramenti alle funzioni cron di base, ma sono anche alquanto difficili da gestire.

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

Credito immagine: scheda di pianificazione di Gonzalo Aragon via Shutterstock

Condividere Condividere Tweet E-mail 12 siti di video migliori di YouTube

Ecco alcuni siti di video alternativi a YouTube. Ognuno di essi occupa una nicchia diversa, ma vale la pena aggiungerlo ai tuoi segnalibri.

Leggi Avanti
Argomenti correlati
  • Linux
  • Linux
Circa l'autore Ivana Isadora Devcic(24 articoli pubblicati)

Ivana Isadora è una scrittrice e traduttrice freelance, amante di Linux e fan di KDE. Supporta e promuove software gratuito e open source ed è sempre alla ricerca di app fresche e innovative. Scopri come metterti in contatto qui .

Altro da Ivana Isadora Devcic

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti