web-dev-qa-db-fra.com

Ajouter des lignes à cron à partir du script

Est-il possible d'ajouter des lignes au cron d'un utilisateur via un script?

Je le fais habituellement avec crontab -e, mais j'aimerais automatiser cette tâche avec un script Shell.

39
Adam Matan

Vous pouvez faire écho à la ligne au bas de la crontab des utilisateurs actuels comme ceci:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
49
Richard Holloway

Si vous voulez éditer une valeur dans votre crontab, vous pouvez faire quelque chose dans les lignes suivantes:

$ crontab -l | sed -e 's/foo/bar/' | crontab -

Évidemment, vous devez faire attention à votre substitution pour vous assurer qu'elle correspond uniquement à 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 métaphorique plutôt qu'un marteau.)

Vous pouvez utiliser n’importe quelle commande d’édition au lieu de sed. Par exemple, si vous voulez utiliser ed pour retoucher une ligne qui commence par ressembler à ceci:

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

Supposons que cette ligne figure parmi de nombreuses lignes ou que vous ayez de nombreuses crontabs différentes à mettre à jour sur des systèmes différents et que vous sachiez seulement que votre ligne sera la seule ligne contenant 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 admettre 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. ^. ^

3
fbicknel