Vous rencontrez des difficultés avec votre approche actuelle car crontab -e
ne lit pas à partir de stdin. Toutefois, crontab
sans le commutateur -e
, lit à partir de stdin.
La façon la plus évidente consiste à ajouter que la nouvelle tâche cron au crontab existant:
crontab -l > current_cron
cat >> current_cron << EOF
# new cron job here
EOF
crontab < current_cron
rm -f current_cron
La question évidente avec cette approche est qu'il n'y a pas de vérification pour voir si le travail cron existe déjà . C'est là que ça peut être un peu difficile.
Une façon d'aborder ce serait d'avoir une « section gérée de script » dans crontab, en général, au fond:
# DO NOT MODIFY THE SECTION BELOW MANUALLY. IT'S MANAGED BY AUTOMATION.
#---script managed section---
"cron job 1"
"cron job 2"
Ensuite, un script peut gérer cette section - il est préférable d'avoir un seul script qui gère toutes les tâches cron automatique:
crontab -l > current_cron
sed '/---script managed section---/q' current_cron > new_cron
cat >> new_cron << EOF
# updated cron jobs here
EOF
crontab < new_cron
rm -f new_cron current_cron
Si nous avons besoin encore plus de contrôle à grains fins, alors nous pouvons avoir une section pour chaque tâche cron géré, avec début et marqueurs de fin et de faire l'accord de script avec section spécifique à chaque fois.
Cependant, il existe une meilleure idée pour Ubuntu. Nous pouvons complètement supprimer crontab et utiliser /etc/cron.d à la place. Ici, nous avons un fichier pour chaque travail cron qui suit le format exact d'une spécification de travail cron. Comme il existe une correspondance 1: 1 entre les tâches cron et les fichiers /etc/cron.d, elles sont gérées directement en tant que fichiers plutôt que par l'intermédiaire de la commande crontab
et, par conséquent, l'automatisation est beaucoup plus facile.
De man cron
sur Ubuntu:
Dans Debian, lit les fichiers Cron dans le répertoire /etc/cron.d. cron traite les fichiers dans /etc/cron.d de la même manière que le fichier/etc/crontab (ils suivent le format spécial de ce fichier, c'est-à-dire qu'ils incluent le champ utilisateur). Cependant, ils sont indépendants de/etc/crontab: ils n'héritent pas, par exemple, des paramètres de variable d'environnement. Ce changement est spécifique à Debian.