Script do Crontab Running na inicialização

1

Eu tenho um .sh que executa um comando. Eu quero usar o crontab -e e entrar no arquivo @reboot / path / to / command.

Como executar isso em um comando, em vez de executar separadamente o crontab -e, insira manualmente a linha e salve o arquivo.

    
por Murda Ralph 02.06.2017 / 17:22

2 respostas

0

Quando você usa crontab -e , um arquivo será criado em /var/spool/cron/crontabs/ , cujo nome é igual ao seu nome de usuário.

Portanto, basta redirecionar sua linha desejada para este arquivo:

echo "@reboot /path/to/file.sh" | sudo tee -a /var/spool/cron/crontabs/$USER
  • usando tee -a , estamos dizendo a tee para anexar @reboot /path/to/file.sh no final deste arquivo, em vez de sobrescrevê-lo.
  • se não estiver lá, será criado.
por Ravexina 02.06.2017 / 17:31
0

Provavelmente a maneira correta de fazer isso - conforme explicado em Como adicionar programaticamente novo arquivo crontab sem substituir o anterior - é despejar o crontab existente em um arquivo temporário, modificá-lo e depois lê-lo novamente. Por exemplo:

cmd='@reboot /path/to/file'
tmpfile=$(mktemp) && crontab -l > "$tmpfile"
cmd='@reboot /path/to/command'
grep -Fxq "$cmd" "$tmpfile" || echo "$cmd" >> "$tmpfile"
crontab "$tmpfile" && rm -- "$tmpfile"

Uma opção "quick'n'dirty" - se você não se importa em verificar - seria

crontab -l | sed '$a@reboot /path/to/command' | crontab -

assumindo o GNU sed, que permite a ppend text em uma linha.

Observação: ao contrário de escrever para /var/spool/cron/crontabs diretamente, essa abordagem não precisa de sudo (porque crontab é setuid).

    
por steeldriver 02.06.2017 / 19:40