22 Maggio 2023

Come impostare un cron su un server Linux tramite SSH

Cosa è un’Operazione Pianificata su Linux e come impostare un cron tramite crontab ?

Nell’attuale era digitale, caratterizzata da flussi di dati ininterrotti e operazioni che si svolgono 24 ore su 24, gli amministratori di sistema si confrontano costantemente con la necessità di gestire task e processi che devono essere eseguiti a orari ben definiti. In questa cornice, spicca per utilità e funzionalità il cron, una utility di pianificazione dei task presente nei sistemi operativi Unix-like, tra cui il celebre Linux.

Cron si rivela uno strumento di incredibile potenza e flessibilità, in grado di automatizzare l’esecuzione di comandi o script secondo una programmazione temporale definita. La gamma di attività che può gestire è ampia e variegata, includendo l’eliminazione periodica dei file temporanei, la creazione di backup di dati critici, il monitoraggio e controllo dello stato del sistema, oltre a una moltitudine di altre operazioni che, se gestite manualmente, possono risultare onerose e soggette ad errori.

Uno degli aspetti più affascinanti di cron risiede nella sua combinazione unica di versatilità e semplicità. Pur disponendo di una struttura complessa che permette di definire schedule di esecuzione molto precise, la sua gestione è incredibilmente semplice. Con poche righe di codice, è possibile programmare una serie di operazioni ricorrenti, ottenendo un notevole risparmio di tempo e riducendo al minimo gli errori dovuti all’intervento umano. Questo rappresenta un vantaggio considerevole in un contesto in cui l’efficienza operativa e l’affidabilità del sistema sono di vitale importanza.

Come è strutturato un cron su Linux?

Un cron job in Linux è definito da una singola riga di testo all’interno del crontab, la “tabella cron”. Questa riga di testo è suddivisa in sei parti distinte, ognuna delle quali rappresenta un elemento diverso del cron job.

Queste parti, in ordine, sono:

  1. Minuto: Questo campo può assumere valori da 0 a 59 e indica il minuto di ogni ora in cui il cron job deve essere eseguito.
  2. Ora: Questo campo può assumere valori da 0 a 23 e indica l’ora del giorno in cui il cron job deve essere eseguito.
  3. Giorno del mese: Questo campo può assumere valori da 1 a 31 e indica il giorno del mese in cui il cron job deve essere eseguito.
  4. Mese: Questo campo può assumere valori da 1 a 12 e indica il mese dell’anno in cui il cron job deve essere eseguito.
  5. Giorno della settimana: Questo campo può assumere valori da 0 a 7, dove sia 0 che 7 rappresentano la domenica. Indica il giorno della settimana in cui il cron job deve essere eseguito.
  6. Comando o script: Questo è il comando che si desidera eseguire o il percorso al file di script da eseguire. Può includere qualsiasi comando che si eseguirebbe normalmente dalla riga di comando.

Ogni campo è separato da uno spazio. È inoltre possibile utilizzare speciali operatori come ““, “/”, “-“, “,” e “/” per specificare cron job che si ripetono a intervalli regolari o che avvengono in momenti specifici.

Per esempio, la riga 0 14 * * * /percorso/allo/script.sh nel crontab indica un cron job che eseguirà lo script specificato ogni giorno alle ore 14:00.

Come impostare un cron tramite SSH

Prima di iniziare, è importante notare che avrai bisogno di accesso SSH al tuo server. Se non lo avessi già, dovresti procurartelo, poiché SSH è uno strumento fondamentale per la gestione di un server remoto.

SSH, acronimo di Secure Shell, è un protocollo di rete che consente la comunicazione sicura tra due sistemi utilizzando un’architettura client-server. Permette agli utenti di controllare e modificare i loro server remoti su Internet.

Per accedere al tuo server tramite SSH, avrai bisogno delle credenziali dell’utente, che includono l’indirizzo IP del server, il nome utente e la password. Se non hai queste informazioni, dovrai richiederle all’amministratore di sistema.

Ecco i passaggi per impostare un cron tramite crontab:

  1. Accesso al Server: Prima di tutto, connettiti al tuo server utilizzando SSH. Puoi farlo dal tuo terminale utilizzando il comando ssh username@your_server_ip.
  2. Apertura del Crontab: Una volta connesso, puoi accedere al crontab, la tabella che cron utilizza per tracciare i lavori programmati, utilizzando il comando crontab -e. Se è la prima volta che usi crontab, ti verrà chiesto di scegliere l’editor di testo che preferisci. Puoi scegliere tra opzioni come nano, vi o emacs.
  3. Scrittura del Job: Ora, è possibile inserire il tuo job. Ogni linea del crontab rappresenta un job ed è costituita da sei parti: minuto (0-59), ora (0-23), giorno del mese (1-31), mese (1-12), giorno della settimana (0-7, dove sia 0 che 7 rappresentano la domenica), e il comando o lo script da eseguire.
  4. Salvataggio del Job: Dopo aver inserito il tuo job, salva e chiudi l’editor. Se stai usando nano, ad esempio, puoi fare ciò premendo CTRL+X, poi Y per confermare il salvataggio e infine Enter per confermare il nome del file.

Esempi di Cron

Per aiutarti a capire meglio come impostare i cron, ecco alcuni esempi pratici:

  1. Esegui un comando ogni minuto: Per farlo, inseriresti * * * * * comando nel crontab. Il comando verrà eseguito ogni minuto.
  2. Esegui uno script ogni giorno alle 2 del pomeriggio: Inserisci 0 14 * * * /percorso/allo/script.sh nel crontab. Lo script verrà eseguito ogni giorno alle 14:00.
  3. Esegui un comando il primo giorno di ogni mese: Inserisci 0 0 1 * * comando nel crontab. Il comando verrà eseguito alle 00:00 del primo giorno di ogni mese.
  4. Esegui un comando ogni lunedì alle 6 del mattino: Inserisci 0 6 * * 1 comando nel crontab. Il comando verrà eseguito ogni lunedì alle 6:00.
  5. Esegui uno script ogni 15 minuti: Inserisci */15 * * * * /percorso/allo/script.sh nel crontab. Lo script verrà eseguito ogni 15 minuti.
  6. Esegui un comando ogni ora: Inserisci 0 * * * * comando nel crontab. Il comando verrà eseguito ogni ora.
  7. Esegui un comando ogni mezz’ora: Inserisci */30 * * * * comando nel crontab. Il comando verrà eseguito ogni mezz’ora.
  8. Esegui uno script ogni due ore: Inserisci 0 */2 * * * /percorso/allo/script.sh nel crontab. Lo script verrà eseguito ogni due ore.
  9. Esegui un comando ogni giorno alle 8 del mattino e alle 8 di sera: Inserisci 0 8,20 * * * comando nel crontab. Il comando verrà eseguito ogni giorno alle 8:00 e alle 20:00.
  10. Esegui uno script il primo lunedì di ogni mese: Inserisci 0 0 * * 1 [ "$(date +\%m)" != "$(date +\%m -d '1 week')" ] && /percorso/allo/script.sh nel crontab. Lo script verrà eseguito il primo lunedì di ogni mese.
  11. Esegui un comando alle 10.30 del mattino ogni giorno: Inserisci 30 10 * * * comando nel crontab. Il comando verrà eseguito ogni giorno alle 10:30.
  12. Esegui uno script ogni 5 minuti durante l’orario lavorativo (9-17): Inserisci */5 9-17 * * * /percorso/allo/script.sh nel crontab. Lo script verrà eseguito ogni 5 minuti durante l’orario lavorativo.
  13. Esegui un comando ogni anno: Inserisci 0 0 1 1 * comando nel crontab. Il comando verrà eseguito una volta all’anno, precisamente alle 00:00 del 1 gennaio.
  14. Esegui uno script ogni 10 minuti durante il fine settimana: Inserisci */10 * * * 6,7 /percorso/allo/script.sh nel crontab. Lo script verrà eseguito ogni 10 minuti durante il sabato e la domenica.
  15. Esegui un comando ogni quarto d’ora dal lunedì al venerdì: Inserisci */15 * * * 1-5 comando nel crontab. Il comando verrà eseguito ogni 15 minuti dal lunedì al venerdì.
  16. Esegui uno script alle 3 del pomeriggio il primo giorno di primavera (21 marzo): Inserisci 0 15 21 3 * /percorso/allo/script.sh nel crontab. Lo script verrà eseguito alle 15:00 del 21 marzo.
  17. Esegui un comando ogni 5 ore: Inserisci 0 */5 * * * comando nel crontab. Il comando verrà eseguito ogni 5 ore.
  18. Esegui uno script ogni giorno alle 2 del pomeriggio, eccetto il fine settimana: Inserisci 0 14 * * 1-5 /percorso/allo/script.sh nel crontab. Lo script verrà eseguito alle 14:00 dal lunedì al venerdì.
  19. Esegui un comando ogni giorno alle 22:30: Inserisci 30 22 * * * comando nel crontab. Il comando verrà eseguito ogni giorno alle 22:30.
  20. Esegui uno script il 15 di ogni mese: Inserisci 0 0 15 * * /percorso/allo/script.sh nel crontab. Lo script verrà eseguito il 15 di ogni mese alle 00:00.

Ricorda, cron è uno strumento potente, ma con grande potere viene anche una grande responsabilità. È importante verificare sempre due volte le impostazioni dei cron job per evitare potenziali problemi.

Cron per richiamare URL tramite curl o wget

Se sei un webmaster o gestisci un server web, potresti aver bisogno di eseguire operazioni programmate richiamando specifiche URL. Questo può essere particolarmente utile per l’automazione di processi come il polling di dati da un API, il trigger di operazioni di manutenzione, l’attivazione di backup o la pulizia di database. Il modo più comune per raggiungere quest’obiettivo è l’utilizzo delle utility `curl` o `wget`.

curl vs wget

`Curl` e `wget` sono due comandi della riga di comando molto popolari nei sistemi Unix-like, utilizzati per il trasferimento di dati da o verso un server utilizzando vari protocolli di rete, tra cui HTTP, HTTPS, FTP e molti altri. Mentre `curl` è più potente e flessibile, `wget` è noto per la sua robustezza e la sua facilità d’uso, soprattutto quando si tratta di download ricorsivi.

Ecco cinque esempi di cron jobs che utilizzano curl o wget:

  1. Richiama un’URL ogni giorno alle 6 del mattino con curl: Inserisci 0 6 * * * curl http://miosito.com/operazione nel crontab. Questo cron job richiamerà l’URL specificata ogni giorno alle 6:00.
  2. Scarica un file ogni notte alle 2 con wget: Inserisci 0 2 * * * wget -O /percorso/al/file http://miosito.com/file.zip nel crontab. Questo cron job scaricherà il file specificato e lo salverà nella posizione specificata ogni notte alle 2:00.
  3. Richiama l’API di un servizio ogni ora con curl: Inserisci 0 * * * * curl https://api.mioservizio.com/update nel crontab. Questo cron job richiamerà l’API specificata ogni ora.
  4. Richiama il wp-cron.php di WordPress ogni 15 minuti con wget: Inserisci */15 * * * * wget -q -O - http://miosito.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1 nel crontab. Questo cron job richiamerà il file wp-cron.php del tuo sito WordPress ogni 15 minuti. L’output sarà ignorato per evitare di riempire i log con informazioni inutili.
  5. Scarica un elenco di file ogni giorno alle 5 del pomeriggio con wget: Inserisci 0 17 * * * wget -i http://miosito.com/lista-di-file.txt nel crontab. Questo cron job scaricherà un elenco di file da un file di testo specificato ogni giorno alle 17:00.

Ricorda che sia curl che wget hanno molte opzioni e funzionalità; quindi, potrebbe essere utile consultare le relative pagine man per scoprire come personalizzare al meglio i tuoi cron jobs.

 

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Facebook, Inc. detiene i diritti su Facebook®; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Questo sito non è affiliato, sponsorizzato, o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello Europeo da MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italia.

Torna in alto