Est-ce que crontab a un argument pour créer des tâches cron sans utiliser l'éditeur (crontab -e). Si oui, quel serait le code pour créer un cronjob à partir d'un script Bash ?
Vous devez utiliser tempfile ou mktemp.
Est-ce que crontab a un argument pour créer des tâches cron sans utiliser l'éditeur (crontab -e). Si oui, quel serait le code pour créer un cronjob à partir d'un script Bash ?
Vous pouvez ajouter à la crontab comme suit :
#write out current crontab
crontab -l > mycron
#echo new cron into cron file
echo "00 09 * * 1-5 echo hello" >> mycron
#install new cron file
crontab mycron
rm mycron
* * * * * "command to be executed"
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
Source : nixCraft .
mycron
est un fichier temporaire utilisé pour stocker le contenu de la crontab. Vous pouvez l'appeler comme bon vous semble.
Vous pouvez le faire à la volée.
crontab -l | { cat; echo "0 0 0 0 0 some entry"; } | crontab -
crontab -l
liste les travaux crontab en cours, cat
l'imprime, echo
imprime la nouvelle commande et crontab -
ajoute tous les trucs imprimés dans le fichier crontab. Vous pouvez voir l'effet en faisant un nouveau crontab -l
.
crontab -l
liste les travaux crontab en cours, cat
l'imprime, echo
imprime la nouvelle commande et crontab -
ajoute tous les éléments imprimés dans le fichier crontab. Vous pouvez voir l'effet en faisant un nouveau crontab -l
Ça marche très bien pour moi. Si l'utilisateur n'a pas de crontab existante, vous verrez no crontab for <username>
mais ça marche quand même.
Ce dernier, plus court, ne nécessite pas de fichier temporaire, il est immunisé contre les insertions multiples et vous permet de modifier le calendrier d'une entrée existante.
Disons que vous avez ça :
croncmd="/home/me/myfunction myargs > /home/me/myfunction.log 2>&1"
cronjob="0 */15 * * * $croncmd"
Pour l'ajouter à la crontab, sans duplication :
( crontab -l | grep -v -F "$croncmd" ; echo "$cronjob" ) | crontab -
Pour le supprimer de la crontab quel que soit son horaire actuel :
( crontab -l | grep -v -F "$croncmd" ) | crontab -
Notes :
@moeseth:J'ai évidemment essayé sur mon ordinateur (linux). Je ne voudrais pas suggérer des trucs aléatoires qui ne fonctionnent pas :/.
Merci à tous pour votre aide. En rassemblant ce que j'ai trouvé ici et ailleurs, j'ai trouvé ceci :
command="php $INSTALL/indefero/scripts/gitcron.php"
job="0 0 * * 0 $command"
cat <(fgrep -i -v "$command" <(crontab -l)) <(echo "$job") | crontab -
Je n'arrivais pas à trouver comment éliminer la nécessité des deux variables sans me répéter.
command
est évidemment la commande que je veux programmer. job
prend $command
et ajoute les données d'ordonnancement. J'avais besoin des deux variables séparément dans la ligne de code qui effectue le travail.
<(*command*)
) pour transformer la sortie de crontab -l
en entrée pour le fgrep
commandement.fgrep
puis filtre toutes les correspondances de $command
( -v
), insensible à la casse (option -i
option).<(*command*)
) est utilisé pour transformer le résultat en entrée pour la fonction cat
commandement.cat
La commande reçoit également echo "$job"
(auto-explicatif), encore une fois, grâce à l'utilisation du truc de redirection ( <(*command*)
).crontab -l
et le simple echo "$job"
combinés, sont envoyés ('|') vers crontab -
pour être enfin écrit.Cette ligne de code filtre toutes les tâches cron qui correspondent à la commande, puis écrit les tâches cron restantes avec la nouvelle, agissant efficacement comme une fonction "ajouter" ou "mettre à jour". Pour utiliser cette fonction, il suffit d'intervertir les valeurs de l'attribut command
y job
variables.
Pour le bénéfice des autres lecteurs, l'avantage de cette approche est que vous pouvez l'exécuter plusieurs fois sans vous soucier des entrées en double dans la crontab (contrairement à toutes les autres solutions). C'est grâce à la fonction fgrep -v
Si vous préférez la méthode traditionnelle de tuyauterie de gauche à droite, remplacez la dernière ligne par : crontab -l | fgrep -i -v "$command" | { cat; echo "$job"; } | crontab -l
@TheBonsai oh je vois, je l'ai corrigé maintenant pour que la nouvelle commande APPLIQUE le contenu de la crontab existante.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Duplicata possible de Comment puis-je créer par programme une nouvelle tâche cron ?
14 votes
Malheureusement, la plupart des meilleures réponses ici montrent simplement comment modifier la crontab - bien que de manière raisonnablement sûre - mais je pense que c'est globalement la mauvaise approche. La meilleure, la plus sûre et la plus simple est de déposer un fichier dans {{cron.d}}, et il y a (actuellement) des réponses peu votées qui expliquent comment le faire si vous regardez plus bas.
0 votes
@gregmac, merci. Je crois que le mien ressemble à ce commentaire... j'ai essayé d'expliquer ce qui se passait et où ça pouvait vivre.