Est-il possible 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.
Est-il possible 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.
Réponses:
Vous pouvez rappeler 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 -
cron
été changé.
crontab
pour cet utilisateur, il n'existe pas encore (?)
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 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 sledgehammer.)
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 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 savez 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 près de 100% du temps sed fera quoi ed fera, mais il est toujours bon d'avoir un outil supplémentaire sur le couteau suisse. ^. ^