(Je n'ai pas assez de réputation pour commenter, donc j'ajoute à comme réponse: n'hésitez pas à l'ajouter comme commentaire à côté de sa réponse)
Le one-liner de Joe Casadonte est parfait, sauf si vous exécutez avec set -e
, c'est-à-dire si votre script est configuré pour échouer en cas d'erreur, et s'il n'y a pas encore de cronjobs. Dans ce cas, le one-liner ne créera PAS le cronjob, mais n'arrêtera PAS le script. L'échec silencieux peut être très trompeur.
La raison en est que crontab -l
retourne avec un 1
code de retour, echo
empêchant l'exécution de la commande suivante (le ) ... ainsi le cronjob n'est pas créé. Mais comme ils sont exécutés en tant que sous-processus (à cause de la parenthèse), ils n'arrêtent pas le script.
( Fait intéressant, si vous exécutez la même commande à nouveau, il fonctionnera: une fois que vous avez exécuté crontab -
une fois, crontab -l
rien encore sorties, mais il ne plus (vous ne recevez pas revenir pas d'erreur le no crontab for <user>
message de plus) Ainsi , la suite. echo
Est exécuté et le crontab est créé)
Dans tous les cas, si vous exécutez avec set -e
, la ligne doit être:
(crontab -l 2>/dev/null || true; echo "*/5 * * * * /path/to/job -with args") | crontab -