
Estou tentando executar um script bash simples que desliga meu notebook se ele não estiver conectado ao AC com um cron job.
Meu roteiro é o seguinte:
#!/bin/bash
if ! on_ac_power; then
poweroff
fi
E configurei o cron para executá-lo a cada minuto assim:
*/1 * * * * /home/user/Documents/script.sh
O script funciona bem se eu executá-lo manualmente, mas, caso contrário, parece não ter efeito no cron.
O que estou perdendo aqui?
Responder1
Primeiro de tudo, eu não estava executando meu cron como root.
Aparentemente, para que um cron seja executado no root, você precisa adicioná-lo sudo crontab -e
, qualquer coisa adicionada apenas com crontab -e
não será executada como sudo.
Segundo, conforme apontado na referência:
O cron é executado em um ambiente muito limitado por padrão, portanto, muitos comandos executados via nome de comando de um terminal de usuário precisam do caminho completo em um crontab ou de uma declaração no início do crontab para expandir o caminho.
Acabei substituindo poweroff
por /sbin/shutdown
no meu script e agora ele funciona conforme o esperado.
#!/bin/bash
if ! on_ac_power;
then
/sbin/shutdown
fi