Eu tenho um script que é executado quando um servidor (Ubuntu 14.04) é inicializado usando @reboot no crontab (sob o usuário root)
@reboot /bin/bash /root/init.sh >> /var/logs/vminit.log
O script executa várias coisas, mas quando atinge essa linha
ifdown eth1
O script é encerrado e ifdown
não é executado. (A execução de ifconfig
ainda mostra eth1 na saída) Ativar o modo Verbose em ifdown
também não retorna.
Se eu mesmo executar manualmente o script, ele será executado conforme o esperado.
Eu escrevi um script de teste apenas para descartar problemas com init.sh
#!/bin/bash
echo 'one'
ifdown eth1
echo 'two'
Se eu executar manualmente, recebo esta saída (o que é esperado)
one
<DHCP Client info>
two
Se eu colocar este script de teste no crontab para ser executado com @reboot
, obtenho os mesmos resultados que init.sh
e a saída é
one
Eu testei executando o cron em um momento exato (Exemplo: 25 14 * * *
) para ver se é algo com '@reboot', mas sem sorte.
Eu também tentei atrasar a execução do script após a inicialização, caso algo estivesse bloqueando ifdown da execução
@reboot /bin/sleep 60; /bin/bash /root/init.sh >> /var/log/vminit.log
Algumas notas:
- Eth1 é uma interface ativa, antes de executar ifdown o script faz uma chamada de eth1 para pegar um arquivo com sucesso.
- O script é executado como root
- Permissões com o script (e log) estão bem.
- Executar init.sh
ou o script de teste é executado manualmente conforme o esperado.