Adiciona linhas ao cron do script

34

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.

    
por Adam Matan 25.08.2011 / 11:08

2 respostas

43

Você pode fazer o eco da linha na parte inferior do usuário atual crontab assim:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
    
por Richard Holloway 25.08.2011 / 11:40
3

Se você quiser editar um valor no seu crontab, você pode fazer algo como:

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

Obviamente, você precisa ter cuidado com sua substituição para ter certeza de que ela corresponde apenas à (s) linha (s) que você deseja alterar; caso contrário, todos os foos serão alterados para bars (neste exemplo).

A vantagem deste 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ê quisesse usar ed para retocar uma linha que começa assim:

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

Digamos que esta linha esteja entre várias linhas ou que você tenha muitos crontabs diferentes para atualizar em sistemas diferentes e saiba apenas que sua linha será a única com o termo flitch nela.

Pode parecer:

$ 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 fará o que ed fará, mas é sempre bom ter uma ferramenta extra no canivete suíço . ^. ^

    
por fbicknel 27.09.2016 / 17:15