Comment configurer un travail Cron?

536

Je souhaite planifier l'exécution régulière d'une tâche et j'ai appris que Cron était le moyen de le faire.

Comment puis-je ajouter des emplois Cron dans Ubuntu?

Gabriel Salomon
la source

Réponses:

657

Mettez un script shell dans l' un de ces dossiers: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyou /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 situation. 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,55dans le champ des minutes, cela signifie que vous courez à 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 tous les 20, alors dans la colonne des minutes, il est équivalent 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 .

LassePoulsen
la source
7
Ceux-ci sont à l'échelle du système et fonctionnent avec des privilèges élevés. Je ne mettrais rien là-dedans sauf s'il y a un besoin urgent d'accès ou de permission. En règle générale, essayez de faire des choses sans capacités. Par conséquent, j'aime cette réponse mieux: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/...
H Marcelo Morales
5
@Marcelo Morales, qui exécutera également les commandes données en tant que root! Si par contre vous n'utilisez pas sudo, vous créerez un utilisateur crontab qui sera exécuté sous le nom de l'utilisateur qui l'a créé!
LassePoulsen
4
* / 15 * * * * / path / to / command était très pratique pour moi! Merci!
Andrew Odendaal
18
Il est à noter que ces modifications sont appliquées automatiquement, vous n'avez pas besoin de redémarrer / recharger quoi que ce soit.
Molomby
6
Un autre conseil utile est qu’au lieu de cela */15 * * * * /path/to/command, vous pouvez le faire @reboot /path/to/commandpour exécuter quelque chose au démarrage.
Kenneth Worden
102

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 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 la crontab utilisateur 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.

La méthode la plus flexible consiste à utiliser la crontab système, /etc/crontabque vous ne pouvez modifier qu'avec les privilèges root. Dans ce fichier, l'utilisateur doit exécuter chaque commande comme spécifié, afin que vous puissiez 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

Li Lo
la source
1
Voici un doux manipulateur cron interactif qui vous donnera l'anglais au temps cron crontab.guru
CTS_AE
52

Si vous préférez le faire à l'aide d'une interface graphique, vous pouvez accéder au Centre de logiciel et installer des 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.

Javier Rivera
la source
3
non disponible pour 16.04 apparemment bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash
@TankorSmash Vous pouvez l'obtenir ici
M. Becerra le
Les conditions d'emballage ne peuvent pas être satisfaites le 16.04
Odysseus Ithaca
26

Je recommande le planificateur de tâches de KDE ( kde-config-cron) Installez kde-config-cron . Vous pouvez y accéder depuis les 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.

entrez la description de l'image ici

Gertvdijk
la source
11

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.

Antonio
la source
Il n'a pas trouvé pour Ubuntu 16.04
SaidbakR
S'il vous plaît jeter un oeil à I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Il y a un paquet à télécharger @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Il suffit de jouer$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio
10

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, des travaux Cron figurent déjà 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
Craig van Tonder
la source
2

Exemple de script exécuté test_cron.shpar cron toutes les minutes sur Ubuntu 18.04 à l'aide d'un lien symbolique:

test_cron.sh fichier:

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

Si vous souhaitez utiliser des variables d'environnement dans votre script comme $USERdans des chemins, il est préférable de taper 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 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 du 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 mynamej'ai ajouté une nouvelle tâche à exécuter test_cronchaque 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/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Alexandre
la source