Ajouter des lignes à cron à partir du script

36

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.

    
posée Adam Matan 25.08.2011 - 11:08
la source

2 réponses

45

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 -
    
réponse donnée Richard Holloway 25.08.2011 - 11:40
la source
3

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 . ^. ^

    
réponse donnée fbicknel 27.09.2016 - 17:15
la source

Lire d'autres questions sur les étiquettes