Je veux planifier une tâche à exécuter régulièrement et j'ai entendu dire que Cron est le moyen de le faire.
Comment puis-je ajouter des emplois Cron dans Ubuntu?
Placez un script Shell dans l'un des dossiers suivants: /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 au terminal et tapez:
crontab -e
Cela ouvrira votre crontab personnelle (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 sa planification, et le format est assez simple lorsque vous maîtrisez la chose. La structure est:
minute hour day-of-month month day-of-week command
Pour tous les numéros, vous pouvez utiliser des listes, par exemple 5,34,55
dans le champ des minutes signifiera une exécution à 5 heures, 34 heures et 55 heures, quelle que soit l'heure définie.
Vous pouvez également utiliser des intervalles. Ils sont définis comme suit: */20
. Cet exemple signifie que tous les 20 secondes. Dans la colonne des 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, 0 étant le dimanche.
Vous pouvez en 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 une crontab utilisateur que vous pouvez éditer en exécutant EDITOR="gedit" crontab -e
(qui utilisera gedit pour éditer le fichier crontab) ou simplement crontab -e
(qui utilisera la valeur par défaut). éditeur) 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 un travail cron qui s'exécute en tant que root, vous pouvez éditer la crontab de root en exécutant Sudo crontab -e
.
Le moyen le plus flexible consiste à utiliser la crontab système /etc/crontab
que vous ne pouvez modifier qu'avec les privilèges root. Dans ce fichier, l'utilisateur doit exécuter chaque commande comme spécifié. Vous pouvez donc exécuter vos commandes en tant que root (si vous avez besoin de ce niveau de privilège) ou de tout autre utilisateur du système.
Par exemple, si vous voulez 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 crontab du système avec cat /etc/crontab
.
Plus de détails sur: https://help.ubuntu.com/community/CronHowto
Si vous préférez le faire en utilisant une interface graphique, vous pouvez aller dans le Centre logiciel et installer tâches planifiées (ou exécuter 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 par défaut seront exécutées en tant que votre propre utilisateur, pas 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 à partir du Paramètres système du module Planificateur de tâches .
Il gère à la fois les Crontabs personnels et système, et la facilité de création des limites de temps m'a beaucoup 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 normal. Cela ne fonctionne que dans les systèmes KDE tels que KUbuntu. Pour les systèmes non KDE, vous préférerez utiliser gnome-schedule
$ Sudo apt-get install gnome-schedule
L'application est tâches planifiées dans le tableau de bord.
Je voulais configurer un travail Cron pour qu'il s'exécute via un script bash. L'exécution du script ajouterait donc 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 qui exécute la commande crontab. Donc, sur cette base et au moins en 14.04, 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 le propriétaire correct du fichier:
chown root:root /var/spool/cron/crontabs/root
Et définissez les autorisations correctes:
chmod 600 /var/spool/cron/crontabs/root
Si, lorsque vous exécutez crontab -e
, il existe déjà des travaux Cron dans la liste, vous pouvez les ajouter à la liste à l'aide de la commande suivante:
echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Exemple d'exécution du script test_cron.sh
par cron toutes les minutes sur Ubuntu 18.04 à l'aide d'un lien symbolique:
fichier test_cron.sh
:
#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log
Si vous souhaitez utiliser des variables d'environnement dans votre script telles que $USER
dans les chemins, il est préférable de saisir un chemin précis, bash ne connaîtra pas vos variables au moment de l'exécution.
myname
est le nom d'utilisateur (faisant partie du groupe racine, 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.allow
root
myname
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.sh
chmod +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 pour exécuter test_cron
toutes les minutes.
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/syslog
Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)