Executando comando na inicialização no crontab

24

Eu queria executar um comando no nosso linux após a reinicialização, vi que isso pode ser feito usando o crontab. Eu queria executar este comando

sudo ifdown eth0 && sudo ifup -v eth0

no crontab posso fazer:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

ou preciso armazenar isso em um script?

obrigado

Lottie
fonte
7
O Crontab parece ser uma ferramenta errada para reiniciar o eth0. Por que não colocar esse comando (sem sudo) no /etc/rc.local?
Mikewhatever
Para que você precisa fazer isso? Essas tarefas geralmente são executadas automaticamente durante o processo de inicialização e NUNCA precisam ser executadas separadamente dos processos de inicialização automatizados ...
Thomas Ward
1
@mikewhatever eu não posso votar no momento, mas só quero agradecer por sugerir isso.
Lottie

Respostas:

34

Algumas notas aqui antes que isso funcionasse:

  1. Não use sudoem um trabalho cron. Em vez disso, edite rooto crontab em vez do seu, por exemplo, sudo crontab -ee insira comandos sem sudo.
  2. Como o @mikewhatever mencionou, esse é um uso estranho para cron, e provavelmente seria melhor colocado /etc/rc.localantes da exit 0linha.
  3. Se você nos informar exatamente o que está procurando, poderemos direcioná-lo para uma opção de log ou configuração (reiniciar os serviços de rede na inicialização parece um pouco hack).
  4. Na maioria dos sistemas @reboot, também deve ser executado após um desligamento ou travamento difícil, mas existem implementações cron diferentes para o YMMV. Já vi comentários em lugares diferentes afirmando ambos.

EDIT (17/02/2016): Removido a sinopse incorreta em caminhos absolutos; kudos @muru
EDIT (17/10/2016): Adicionada nota de desligamento
EDIT (2017/09/11): Nota de desligamento revisada. Não tenho muita certeza disso.

TheSchwa
fonte
ok só quero esclarecer, eu deveria apenas escrever o comando completo etc/rc.localsem o sudo. então será apenas ifdown eth0 && sudo ifup -v eth0 exit 0
Lottie
cronusa o PATHdado em /etc/environment, que possui /sbin.
muru
Fiz o que o @mikewhatever sugeriu e funcionou. obrigado #
21716 Lottie
1
@TheSchwa deveria ser. Pelo menos desde 12.04, /etc/pam.d/croncarrega pam_env, portanto, /etc/environmentdeve ser lido e o padrão PATHdefinido em usado. Essa resposta foi postada pouco antes do dia 12.04.
muru
2
@TheSchwa A declaração de que a reinicialização do cron não é executada em uma inicialização a frio está errada. As linhas com reinicialização são executadas quando o daemon crond é iniciado, ponto final. Ou seja, é uma inicialização quente, uma inicialização a frio ou se não houve inicialização, e eu apenas desliguei manualmente o crond e iniciei novamente. O daemon crond não sabe nem se importa por que está sendo reiniciado; ele simplesmente executa as linhas de reinicialização sempre que o faz.
Kurt Fitzner
6

Você pode usar o crontab para isso, mas se você usar sudo, precisará de uma NOPASSWDregra sudoerspara fazer isso. (Consulte Como executar um trabalho cron usando o comando sudo .)

Seria mais simples editar /etc/rc.locale adicionar esses comandos antes da exit 0linha.

muru
fonte