J'ai un .sh qui exécute une commande. Je veux utiliser crontab -e et entrer dans le fichier @reboot/path/to/command.
Comment exécuter cela dans une commande au lieu d'exécuter séparément crontab -e, puis insérez manuellement la ligne puis enregistrez le fichier.
Lorsque vous utilisez crontab -e
, un fichier est créé à /var/spool/cron/crontabs/
dont le nom correspond à votre nom d'utilisateur.
Il suffit donc de rediriger la ligne souhaitée vers ce fichier:
echo "@reboot /path/to/file.sh" | Sudo tee -a /var/spool/cron/crontabs/$USER
tee -a
nous demandons à tee
d’ajouter @reboot /path/to/file.sh
à la fin de ce fichier au lieu de l’écraser.Probablement la manière droite de le faire - comme expliqué dans Comment ajouter par programme un nouveau fichier crontab sans remplacer le précédent - est de dump la crontab existante dans un fichier temporaire, modifiez-la, puis relisez-la. Par exemple:
cmd='@reboot /path/to/file'
tmpfile=$(mktemp) && crontab -l > "$tmpfile"
cmd='@reboot /path/to/command'
grep -Fxq "$cmd" "$tmpfile" || echo "$cmd" >> "$tmpfile"
crontab "$tmpfile" && rm -- "$tmpfile"
Une option "quick'n'dirty" - si vous ne vous souciez pas de vérifier - serait
crontab -l | sed '$a@reboot /path/to/command' | crontab -
en supposant que GNU sed, ce qui permet a
pend du texte sur une ligne.
Remarque: contrairement à l'écriture dans /var/spool/cron/crontabs
directement, cette approche n'a pas besoin de Sudo
(car crontab
est setuid).