Crontab apenas executa alguns comandos?

0

Eu tenho um Raspberry Pi 2, que eu uso como quiosque, para isso eu instalei a distro FullPageOS baseada em Raspbian.

Tudo funciona bem, exceto que alguns comandos falham silenciosamente ao tentar executar a partir do crontab.

Eu tenho dois comandos para ativar e desativar o quiosque em determinados momentos pelo usuário pi:

$crontab -l -u pi
# m h  dom mon dow   command
05 9 mon-fri * * /bin/bash /home/pi/scripts/dispon.sh >> /tmp/cronjob.log 2>&1
15 18 mon-fri * * /usr/bin/xset -display :0 dpms force off >> /tmp/cronjob.log 2>&1
*/3 * * * * /usr/bin/touch /tmp/1111 >> /tmp/cronjob.log 2>&1

Como você pode ver, eu tentei de diferentes maneiras: para executar o xset diretamente na sequência do monitor desligado, e como parte do script, ao executar o monitor.

Conteúdo do script dispon.sh (é chmod a + x):

#!/bin/bash
xset -display :0 dpms force on
xset -display :0 -dpms

Nenhum comando parece funcionar (o display não liga / desliga) e não deixa nenhuma mensagem de erro em /tmp/cronjob.log

O comando de toque funciona e toca no arquivo.

O xset e o dispon.sh funcionam bem quando são executados pelo usuário pi da conexão SSH.

Alguma ideia?

    
por Gnudiff 19.06.2018 / 11:21

2 respostas

4

A página man do formato de arquivo crontab ( man 5 crontab ) escreve,

Names can also be used for the "month" and "day of week" fields. Use the first three letters of the particular day or month (case doesn't matter). Ranges or lists of names are not allowed.

Observe a última frase: você não pode usar mon-fri (mas você pode usar 1-5 ).

Você também esqueceu que o comentário (primeira linha) lembra a ordem correta dos campos: minuto, hora, dia do mês, mês, dia da semana, comando; mas você tinha colocado os valores do dia da semana cedo demais. Este arquivo crontab corrigido deve funcionar melhor para você:

SHELL=/bin/bash
PATH=/usr/bin:/bin:/usr/local/bin:/home/pi/scripts

# m h  dom mon dow   command
05 9 * * 1-5     dispon.sh >> /tmp/cronjob.log 2>&1
15 18 * * 1-5    xset -display :0 dpms force off >> /tmp/cronjob.log 2>&1
*/3 * * * *      touch /tmp/1111 >> /tmp/cronjob.log 2>&1

Finalmente, se você achar que cron aparentemente está ignorando suas entradas, você pode procurar por seus relatórios de log recentes para ver o que (se alguma coisa) está acontecendo:

grep CRON /var/log/syslog
    
por 19.06.2018 / 11:59
1

Sua coluna 3 do campo dom deve especificar os dias que este comando deve executar a cada mês, por exemplo, 1-3 para executar apenas os dias 1 a 3 a cada mês. Você precisa mover os dias da semana de segunda a sexta para a última coluna.

    
por 19.06.2018 / 11:43