Existe-t-il un moyen d’ajouter des lignes au cron d’un utilisateur via un script?
Je le fais habituellement en utilisant crontab -e
, mais j'aimerais automatiser cette tâche avec un script shell.
Existe-t-il un moyen d’ajouter des lignes au cron d’un utilisateur via un script?
Je le fais habituellement en utilisant crontab -e
, mais j'aimerais automatiser cette tâche avec un script shell.
Vous pouvez faire écho à la ligne située en bas des crontab des utilisateurs actuels, comme ceci:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
Si vous souhaitez modifier une valeur dans votre crontab, vous pouvez faire quelque chose comme:
$ crontab -l | sed -e 's/foo/bar/' | crontab -
Évidemment, vous devez faire attention à votre substitution pour vous assurer qu’elle ne correspond qu’à la ou aux lignes que vous souhaitez modifier; sinon, tous les foos
sont remplacés par bars
(dans cet exemple).
L'avantage de cette méthode est que vous ne remplacez pas l'intégralité de la crontab. (Une pince à épiler métaphorique plutôt qu'un marteau.)
Vous pouvez utiliser n'importe quelle commande d'édition au lieu de sed . Par exemple, si vous souhaitez utiliser ed pour retoucher une ligne qui ressemble à ceci:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
Supposons que cette ligne soit parmi de nombreuses lignes ou que vous ayez plusieurs crontabs différents à mettre à jour sur différents systèmes et que vous savez que votre ligne sera la seule avec le terme flitch
.
Cela pourrait ressembler à:
$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...
Maintenant, je dois avouer que presque 100% du temps sed fera ce que ed fera, mais il est toujours bon d'avoir un outil supplémentaire sur le couteau suisse . ^. ^
Lire d'autres questions sur les étiquettes cron scripts automation