Je souhaite planifier une tâche à exécuter régulièrement et j'ai entendu dire que Cron est le moyen de le faire.
Comment ajouter des tâches Cron dans Ubuntu?
Je souhaite planifier une tâche à exécuter régulièrement et j'ai entendu dire que Cron est le moyen de le faire.
Comment ajouter des tâches Cron dans Ubuntu?
Placez un script shell dans l'un de ces dossiers: /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
ou /etc/cron.weekly
.
Si cela ne vous suffit pas, vous pouvez ajouter des tâches plus spécifiques, par exemple deux fois par mois ou toutes les 5 minutes. Allez dans le terminal et tapez:
crontab -e
Cela ouvrira votre crontab personnel (fichier de configuration cron). La première ligne de ce fichier explique tout! Dans chaque ligne, vous pouvez définir une commande à exécuter et son calendrier, et le format est assez simple lorsque vous en avez l'habitude. La structure est:
minute hour day-of-month month day-of-week command
Pour tous les nombres, vous pouvez utiliser des listes, par ex. 5,34,55
dans le champ minutes, cela signifiera courir à 5 heures passées, 34 heures passées et 55 heures passées, quelle que soit l'heure définie.
Vous pouvez également utiliser des intervalles. Ils sont définis comme ceci: */20
. Cet exemple signifie tous les 20, donc dans la colonne minutes, cela équivaut à 0,20,40
.
Donc pour exécuter une commande tous les lundis à 5h30 de l'après-midi:
30 17 * * 1 /path/to/command
ou toutes les 15 minutes
*/15 * * * * /path/to/command
Notez que le jour de la semaine va de 0 à 6 où 0 est le dimanche.
Vous pouvez lire plus ici.
Si le travail que vous souhaitez exécuter peut être exécuté avec les mêmes privilèges que votre utilisateur, je vous recommande d'utiliser un user crontab que vous pouvez modifier en exécutant EDITOR="gedit" crontab -e
(qui utilisera gedit pour éditer le fichier crontab) ou simplement crontab -e
(qui utilisera l'éditeur par défaut) dans un terminal.
Si vous voulez exécuter quelque chose toutes les 10 minutes, par exemple, vous ajoutez une ligne comme celle-ci
*/10 * * * * /usr/bin/somedirectory/somecommand
et enregistrez le fichier.
Vous pouvez voir le contenu de l'utilisateur crontab avec crontab -l
.
Pour ajouter une tâche cron qui s'exécute en tant que root, vous pouvez modifier la crontab de root en exécutant sudo crontab -e
.
La manière la plus flexible est d'utiliser le système crontab /etc/crontab
que vous ne pouvez modifier qu'avec les privilèges root. Dans ce fichier, l'utilisateur de chaque commande doit être exécuté comme spécifié, de sorte que vous pouvez exécuter vos commandes en tant que root (au cas où vous auriez besoin de ce niveau de privilège) ou tout autre utilisateur du système.
Par exemple, si vous souhaitez exécuter quelque chose toutes les 10 minutes en tant que root, vous devez ajouter une ligne comme celle-ci
*/10 * * * * root /usr/bin/somedirectory/somecommand
(notez l'ajout de l'utilisateur à la ligne)
Vous pouvez voir le contenu du fichier system crontab avec cat /etc/crontab
.
Plus de détails sur: https://help.ubuntu.com/community/CronHowto
Si vous préférez le faire à l'aide d'une interface graphique, vous pouvez accéder au Centre logiciel et installer Tâches planifiées (ou courir sudo apt-get install gnome-schedule
). Il fournira une interface graphique puissante pour ajouter des tâches cron.
Notez que si vous utilisez cette méthode, les tâches seront exécutées par défaut en tant que votre propre utilisateur, et non en tant que root. C'est généralement une bonne chose.
Je recommande Planificateur de tâches de KDE (kde-config-cron
) . Accédez-y depuis le Paramètres Système dans le Planificateur de Tâches module là.
Il gère à la fois les Crontabs personnels et système, et la facilité de création des limites de temps m'a grandement surpris (voir la capture d'écran ci-dessous). Je pense que cette partie est vraiment sous-estimée.
Le planificateur de tâches KDE ne fonctionnera pas dans Ubuntu classique. Cela ne fonctionne que dans les systèmes KDE comme KUbuntu. Pour les systèmes non KDE, vous préférerez utiliser gnome-schedule
$ sudo apt-get install gnome-schedule
L'application est des tâches planifiées dans le tableau de bord.
Je voulais définir un travail Cron pour qu'il s'exécute via un script bash, donc l'exécution du script ajouterait un travail cron.
J'ai réalisé que lorsque vous utilisez:
crontab -e
Ensuite, il crée le fichier:
/var/spool/cron/crontabs/root
Où root est le nom de l'utilisateur exécutant la commande crontab. Donc, sur cette base et dans 14.04 au moins, nous pouvons exécuter les commandes bash suivantes pour créer un nouveau travail Cron:
echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root
Nous devons également définir la propriété correcte du fichier:
chown root:root /var/spool/cron/crontabs/root
Et définissez les autorisations correctes:
chmod 600 /var/spool/cron/crontabs/root
Si quand tu cours crontab -e
il y a déjà des tâches Cron dans la liste, vous pouvez ensuite les ajouter à la liste à l'aide de la commande suivante:
echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Exemple de script en cours d'exécution test_cron.sh
par cron chaque minute sur Ubuntu 18.04 en utilisant un lien symbolique:
test_cron.sh
fichier:
#!/bin/bashecho "System backuped" >> /media/myname/data/backup/backup_tmp.log
Si vous souhaitez utiliser des variables d'environnement dans votre script comme $USER
dans les chemins, il est préférable de taper un chemin précis, bash ne connaîtra pas vos variables au moment de l'exécution.
myname
est le nom d'utilisateur (fait partie du groupe root, je ne suis pas sûr que les privilèges root soient nécessaires).
Autoriser les utilisateurs à définir des tâches cron, un fichier sera créé si nécessaire:
sudo nano /etc/cron.allowrootmyname
Le chemin d'accès au script est /home/myname/shell/test_cron.sh
J'ai changé le propriétaire et l'ai rendu exécutable:
sudo chown myname /home/myname/shell/test_cron.shchmod +x /home/myname/shell/test_cron.sh
J'ai ajouté un lien symbolique:
sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron
Connecté en tant que myname
J'ai ajouté une nouvelle tâche à exécuter test_cron
chaque minute.
crontab -e*/1 * * * * test_cron
Pour vérifier si la commande dans la liste:
crontab -l*/1 * * * * test_cron
Pour vérifier l'exécution
grep -i cron /var/log/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Considérant que vous avez tâches cron multiples avec un utilisateur particulier et ils ne partagent pas le même horaire. Vous pouvez simplement créer un fichier sous /etc/cron.d/
Disons que le nom du fichier est myjobs
ensuite, écrivez simplement tous vos planificateurs dans ce fichier, puis exécutez la commande suivante.
crontab -u <username> /etc/cron.d/myjobs