androide

Pianificazione dei lavori cron con crontab

Day 3 Keynote: Made Here Together (Cloud Next '18)

Day 3 Keynote: Made Here Together (Cloud Next '18)

Sommario:

Anonim

Cron è un demone di pianificazione che esegue attività a intervalli specifici. Queste attività sono chiamate cron job e sono principalmente utilizzate per automatizzare la manutenzione o l'amministrazione del sistema.

Ad esempio, è possibile impostare un processo cron per automatizzare attività ripetitive come il backup di database o dati, l'aggiornamento del sistema con le ultime patch di sicurezza, il controllo dell'utilizzo dello spazio su disco, l'invio di e-mail e così via. Alcune applicazioni, come Drupal o Magento, richiedono cron job per eseguire determinate attività.

È possibile programmare l'esecuzione cron dei lavori per minuto, ora, giorno del mese, mese, giorno della settimana o qualsiasi combinazione di questi.

Cos'è il file Crontab

Crontab (cron table) è un file di testo che specifica la pianificazione dei lavori cron. Esistono due tipi di file crontab. I file crontab a livello di sistema e i file crontab di singoli utenti.

I file crontab degli utenti vengono archiviati in base al nome dell'utente e la loro posizione varia in base al sistema operativo. Nel sistema basato su Red Hat come CentOS, i file crontab sono memorizzati nella directory /var/spool/cron mentre su Debian e Ubuntu i file sono memorizzati nella directory /var/spool/cron/crontabs .

Sebbene sia possibile modificare manualmente i file crontab dell'utente, si consiglia di utilizzare il comando crontab .

/etc/crontab e i file all'interno della directory /etc/cron.d sono file crontab a livello di sistema che possono essere modificati solo dagli amministratori di sistema.

Nella maggior parte delle distribuzioni Linux puoi anche inserire degli script nelle directory /etc/cron.{hourly, daily, weekly, monthly} e gli script verranno eseguiti ogni hour/day/week/month .

Sintassi e operatori di Crontab

Ogni riga nel file crontab dell'utente contiene sei campi separati da uno spazio seguito dal comando da eseguire.

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

I primi cinque campi possono contenere uno o più valori, separati da una virgola o da un intervallo di valori separati da un trattino.

  • * -L'operatore asterisco indica qualsiasi valore o sempre. Se hai il simbolo asterisco nel campo Ora, significa che l'attività verrà eseguita ogni ora. , -L'operatore virgola consente di specificare un elenco di valori per la ripetizione. Ad esempio, se nel campo Ora sono presenti 1, 3, 5 , l'attività verrà eseguita all'1: 00, 3 e 5. - operatore trattino consente di specificare un intervallo di valori. Se hai 1-5 nel campo Giorno della settimana, l'attività verrà eseguita ogni giorno della settimana (dal lunedì al venerdì). / -L'operatore barra consente di specificare valori che verranno ripetuti in un determinato intervallo tra di loro. Ad esempio, se hai */4 nel campo Ora, significa che l'azione verrà eseguita ogni quattro ore. È lo stesso che specificare 0, 4, 8, 12, 16, 20 . Invece dell'asterisco prima dell'operatore barra, puoi anche usare un intervallo di valori, 1-30/10 significa lo stesso di 1, 11, 21 .

File Crontab a livello di sistema

La sintassi dei file crontab a livello di sistema è leggermente diversa rispetto ai crontab dell'utente. Contiene un campo utente obbligatorio aggiuntivo che specifica quale utente eseguirà il processo cron.

* * * * * command(s) * * * * * command(s)

Macro predefinite

Esistono diverse macro di pianificazione Cron specifiche utilizzate per specificare intervalli comuni. È possibile utilizzare queste scorciatoie al posto della specifica della data a cinque colonne.

  • @yearly (o @annually ): esegue l'attività specificata una volta all'anno a mezzanotte (12:00) del 1 ° gennaio. Equivalente a 0 0 1 1 * . @monthly : esegue l'attività specificata una volta al mese a mezzanotte del primo giorno del mese. Equivalente a 0 0 1 * * . @weekly : esegui l'attività specificata una volta alla settimana a mezzanotte di domenica. Equivalente a 0 0 * * 0 . @daily : esegue l'attività specificata una volta al giorno a mezzanotte. Equivalente a 0 0 * * * . @hourly - Esegue l'attività specificata una volta all'inizio dell'ora. Equivalente a 0 * * * * . @reboot : esegue l'attività specificata all'avvio del sistema (tempo di avvio).

Comando Crontab di Linux

Il comando crontab consente di installare o aprire un file crontab per la modifica.

È possibile utilizzare il comando crontab per visualizzare, aggiungere, rimuovere o modificare i lavori cron utilizzando le seguenti opzioni:

  • crontab -e - Modifica il file crontab o creane uno se non esiste già. crontab -l - Visualizza il contenuto del file crontab. crontab -r - Rimuove il file crontab corrente. crontab -i - Rimuovere il file crontab corrente con un prompt prima della rimozione. crontab -u - Modifica altri file crontab di utilizzo. Richiede i privilegi di amministratore di sistema.

Il comando crontab apre il file crontab utilizzando l'editor specificato dalle variabili di ambiente VISUAL o EDITOR .

Variabili di Crontab

Il demone cron imposta automaticamente diverse variabili d'ambiente.

  • Il percorso predefinito è impostato su PATH=/usr/bin:/bin . Se il comando che stai chiamando è presente nel percorso specificato cron, puoi utilizzare il percorso assoluto del comando o modificare la variabile cron $PATH . Non puoi aggiungere implicitamente :$PATH come faresti con uno script normale. La shell predefinita è impostata su /bin/sh . È possibile impostare una shell diversa modificando la variabile SHELL invoca il comando dalla home directory dell'utente. La variabile HOME può essere sovrascritta dalle impostazioni nel crontab. La notifica e-mail viene inviata al proprietario del crontab. Per sovrascrivere il comportamento predefinito, è possibile utilizzare la variabile di ambiente MAILTO con un elenco (separato da virgole) di tutti gli indirizzi e-mail che si desidera ricevere le notifiche e-mail. Se MAILTO è definito ma vuoto ( MAILTO="" ), la posta non viene inviata.

Restrizioni Crontab

Gli amministratori di sistema possono controllare quali utenti hanno accesso al comando crontab usando i file /etc/cron.deny e /etc/cron.allow . I file sono costituiti da un elenco di nomi utente, un nome utente per riga.

Di default esiste solo il file /etc/cron.deny ed è vuoto, il che significa che tutti gli utenti possono usare il comando crontab. Se si desidera negare l'accesso ai comandi crontab a un utente specifico, aggiungere il nome utente a questo file.

Se il file /etc/cron.allow esiste, solo gli utenti elencati in questo file possono usare il comando crontab .

Se nessuno dei file esiste, solo gli utenti con privilegi di amministratore possono usare il comando crontab .

Cron Jobs Esempi

Di seguito sono riportati alcuni esempi di cron job che ti mostreranno come pianificare un'attività da eseguire su periodi di tempo diversi.

  • Esegui un comando alle 15:00 tutti i giorni dal lunedì al venerdì:

    0 15 * * 1-5 command

    Esegui uno script ogni 5 minuti e reindirizza l'output standard su dev null , solo l'errore standard verrà inviato all'indirizzo e-mail specificato:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Esegui due comandi ogni lunedì alle 15:00 (usa l'operatore && tra i comandi):

    0 15 * * Mon command1 && command2

    Esegui uno script PHP ogni 2 minuti e scrivi l'output in un file:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    Esegui uno script ogni giorno, ogni ora, ogni ora, dalle 8:00 alle 16:00:

    00 08-16 * * * /path/to/script.sh

    Esegui uno script il primo lunedì di ogni mese, alle 7 del mattino

    0 7 1-7 * 1 /path/to/script.sh

    Esegui la sceneggiatura alle 21:15, il 1 ° e il 15 di ogni mese:

    15 9 1, 15 * * /path/to/script.sh

    Imposta le variabili HOME , PATH , SHELL e MAILTO ed esegui 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 * * * * command

Conclusione

Hai imparato come creare processi cron e pianificare attività in una data e ora specifiche.

Sentiti libero di lasciare un commento in caso di domande.

cron crontab terminal