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?
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:
Mettere uno script di shell in una di queste cartelle: /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
o /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,55
Nel 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 .
*/15 * * * * /path/to/command
, è possibile fare @reboot /path/to/command
per eseguire qualcosa all'avvio.
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/crontab
che è 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
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.
Raccomando l'Utilità di pianificazione di KDE ( 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.
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.
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
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 -e
ci 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
Esempio di esecuzione dello script test_cron.sh
di 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 $USER
nei 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 myname
ho aggiunto una nuova attività da eseguire test_cron
ogni 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)