web-dev-qa-db-fra.com

Comment configurer un travail Cron?

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?

524
Gabriel Solomon

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 .

641
LassePoulsen

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

100
Li Lo

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.

52
Javier Rivera

Je recommande Planificateur de tâches de KDE (kde-config-cron)Install 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.

enter image description here

25
gertvdijk

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.

11
Antonio

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
9
Craig van Tonder

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)
1
Alexander