Existe uma maneira de adicionar linhas ao cron de um usuário via script?
Geralmente faço isso usando crontab -e
, mas gostaria de automatizar essa tarefa com um script de shell.
Existe uma maneira de adicionar linhas ao cron de um usuário via script?
Geralmente faço isso usando crontab -e
, mas gostaria de automatizar essa tarefa com um script de shell.
Respostas:
Você pode fazer eco da linha na parte inferior do crontab de usuários atuais assim:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
cron
foi alterado.
crontab
para esse usuário não existe ainda (?)
Se você deseja editar um valor no seu crontab, pode fazer algo como:
$ crontab -l | sed -e 's/foo/bar/' | crontab -
Obviamente, você precisa ter cuidado com sua substituição para garantir que ela corresponda apenas à (s) linha (s) que deseja alterar; caso contrário, todos foos
serão alterados para bars
(neste exemplo).
A vantagem desse método é que você não está substituindo o crontab inteiro. (Uma pinça metafórica em vez de uma marreta.)
Você pode usar qualquer comando de edição em vez de sed . Por exemplo, se você deseja usar ed para retocar uma linha que começa assim:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
Digamos que essa linha esteja entre muitas linhas ou você tenha muitos crontabs diferentes para atualizar em sistemas diferentes e você sabe apenas que sua linha será a única linha com o termo flitch
nela.
Pode parecer com:
$ 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
...
Agora devo admitir que quase 100% do tempo sed irá fazer o que ed vai fazer, mas é sempre bom ter uma ferramenta extra sobre o canivete suíço. ^. ^