Come posso impostare un lavoro Cron?


534

Voglio pianificare un'attività da eseguire su base regolare e ho sentito che Cron è il modo per farlo.

Come faccio ad aggiungere lavori Cron in Ubuntu?

Risposte:


655

Mettere uno script di shell in una di queste cartelle: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyo /etc/cron.weekly.

Se questi non ti bastano, puoi aggiungere attività più specifiche, ad esempio due volte al mese o ogni 5 minuti. Vai al terminale e digita:

crontab -e

Questo aprirà il tuo crontab personale (file di configurazione cron). La prima riga di quel file spiega tutto! In ogni riga puoi definire un comando da eseguire e la sua pianificazione, e il formato è abbastanza semplice quando ne hai la certezza. La struttura è:

minute hour day-of-month month day-of-week command

Per tutti i numeri che è possibile utilizzare gli elenchi, ad es. 5,34,55Nel campo dei minuti si intende l'esecuzione a 5, 34 e 55 passati qualunque sia l'ora definita.

Puoi anche usare gli intervalli. Essi sono definiti in questo modo: */20. Questo esempio significa ogni 20, quindi nella colonna dei minuti è equivalente 0,20,40.

Quindi, per eseguire un comando ogni lunedì alle 5:30 del pomeriggio:

30 17 * * 1 /path/to/command

o ogni 15 minuti

*/15 * * * * /path/to/command

Si noti che il giorno della settimana va da 0 a 6, dove 0 è domenica.

Puoi leggere di più qui .


7
Questi sono a livello di sistema e funzionano con privilegi elevati. Non metterei nulla lì a meno che non vi sia una necessità urgente di accesso o autorizzazione. Come regola generale, prova a fare cose senza capacità. Pertanto, mi piace di più questa risposta: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales,

5
@Marcelo Morales, che eseguirà anche i comandi dati come root! se invece non usi sudo, creerai un crontab utente e questo verrà eseguito come l'utente che lo ha creato!
LassePoulsen,

4
* / 15 * * * * / path / to / command mi è stato molto utile! Grazie!
Andrew Odendaal,

18
Vale la pena notare che queste modifiche vengono applicate automaticamente, non è necessario riavviare / ricaricare nulla.
Molomby,

6
Un altro suggerimento utile è che invece di */15 * * * * /path/to/command, è possibile fare @reboot /path/to/commandper eseguire qualcosa all'avvio.
Kenneth Worden,

102

Se il lavoro che si desidera eseguire può essere eseguito con gli stessi privilegi dell'utente, si consiglia di utilizzare un crontab utente che è possibile modificare eseguendo EDITOR="gedit" crontab -e(che utilizzerà gedit per modificare il file crontab) o semplicemente crontab -e(che utilizzerà l'editor predefinito) in un terminale.

Se vuoi eseguire qualcosa ogni 10 minuti, ad esempio, aggiungi una riga come questa

*/10 * * * * /usr/bin/somedirectory/somecommand

e salva il file.

Puoi vedere il contenuto dell'utente crontab con crontab -l.

Per aggiungere un cron job che viene eseguito come root, è possibile modificare il crontab di root eseguendo sudo crontab -e.

Il modo più flessibile è utilizzare il crontab di sistema /etc/crontabche è possibile modificare solo con i privilegi di root. In questo file, l'utente deve eseguire ciascun comando come specificato, in modo da poter eseguire i comandi come root (nel caso in cui sia necessario quel livello di privilegio) o qualsiasi altro utente sul sistema.

Ad esempio, se vuoi eseguire qualcosa ogni 10 minuti come root, aggiungi una riga come questa

*/10 * * * * root /usr/bin/somedirectory/somecommand

(nota l'aggiunta dell'utente alla linea)

Puoi vedere il contenuto del file crontab di sistema con cat /etc/crontab.

Maggiori dettagli su: https://help.ubuntu.com/community/CronHowto


1
Ecco un dolce manipolatore interattivo di cron che ti darà l'inglese al cron time crontab.guru
CTS_AE

52

Se si preferisce farlo utilizzando una GUI, è possibile accedere al Software Center e installare le attività pianificate (o eseguire sudo apt-get install gnome-schedule). Fornirà una potente interfaccia grafica per aggiungere attività cron.

Si noti che se si utilizza questo metodo, le attività per impostazione predefinita verranno eseguite come proprio utente, non come root. Questa è generalmente una buona cosa.


3
non disponibile per il 16.04 apparentemente bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash

@TankorSmash Puoi ottenerlo qui
M. Becerra,

I requisiti del pacchetto non possono essere soddisfatti il ​​16.04
Odysseus Ithaca

26

Raccomando l'Utilità di pianificazione di KDE ( kde-config-cron) Installa kde-config-cron . Accedilo dalle Impostazioni di sistema nel modulo Utilità di pianificazione lì.

Gestisce Crontabs sia personali che di sistema, e la facilità di creare i limiti di tempo mi ha sorpreso molto (vedi lo screenshot qui sotto). Penso che questa parte sia davvero sottovalutata.

inserisci qui la descrizione dell'immagine


11

L'utilità di pianificazione di KDE non funzionerà con Ubuntu normale. Funziona solo con sistemi KDE come KUbuntu. Per i sistemi non KDE preferirai usare gnome-schedule

$ sudo apt-get install gnome-schedule

L'app è Attività pianificate nel Dash.


Non trovato per Ubuntu 16.04
SaidbakR

Dai un'occhiata a I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Esiste un pacchetto per scaricare @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Basta esibirsi$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio,

10

Volevo impostare un lavoro Cron per l'esecuzione di uno script bash, quindi l'esecuzione dello script avrebbe aggiunto un lavoro cron.

Mi sono reso conto che quando usi:

crontab -e 

Quindi crea il file:

/var/spool/cron/crontabs/root

Dove root è il nome dell'utente che esegue il comando crontab. Quindi, basandoci su questo e almeno in 14.04, possiamo eseguire i seguenti comandi bash per creare un nuovo lavoro Cron:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Dobbiamo anche impostare la proprietà corretta per il file:

chown root:root /var/spool/cron/crontabs/root

E imposta le autorizzazioni corrette:

chmod 600 /var/spool/cron/crontabs/root

Se quando esegui crontab -eci sono già lavori Cron nell'elenco, allora puoi aggiungere all'elenco usando il seguente comando:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

2

Esempio di esecuzione dello script test_cron.shdi cron ogni minuto su Ubuntu 18.04 usando il collegamento simbolico:

test_cron.sh file:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Se si desidera utilizzare le variabili di ambiente nello script come $USERnei percorsi, è meglio digitare un percorso preciso, bash non conoscerà le variabili al momento dell'esecuzione.

myname è il nome utente (parte del gruppo radice, non sono sicuro che siano necessari i privilegi di radice).

Consenti agli utenti di impostare lavori cron, il file verrà creato se necessario:

sudo nano /etc/cron.allow

root
myname

Il percorso per lo script è /home/myname/shell/test_cron.sh

Ho cambiato il proprietario e l'ho reso eseguibile:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

Ho aggiunto un link simbolico:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Registrato come mynameho aggiunto una nuova attività da eseguire test_cronogni minuto.

crontab -e

*/1 * * * * test_cron

Per verificare se il comando nell'elenco:

crontab -l

*/1 * * * * test_cron

Per verificare l'esecuzione

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.