Como iniciar o script de shell interativo no bash a cada hora com o cron?

2

Eu coloquei esta linha no crontab:

1 * * * * DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

O script é executável.

Se colar esse comando no terminal, ou seja, a string sem estrelas, funcionará perfeitamente:

DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

Eu tentei:

sudo service cron restart

Mas o problema persiste. Como posso obter cron para executar esse comando por hora?

Atualizar. Trabalhei com o crontab ROOT:

1 * * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 XAUTHORITY=/home/user/.Xauthority /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
    
por ngc3o34 26.07.2014 / 18:33

1 resposta

5

Acho que meu primeiro palpite sobre a maneira como a variável DISPLAY é tratada está errado. Eu acho que o problema de alguma forma relacionado a cron usando um shell não interativo. Um script de teste usando um loop read infinito falhou ao ser executado. No entanto, quando testei abrindo uma nova guia:

* * * * * DISPLAY=:0 /usr/bin/gnome-terminal --tab -e /home/murukesh/test.sh

funcionou bem.

De acordo com essa pergunta da SU e este fórum do Ubuntu post , você pode ter que export a variável $DISPLAY ou usar env :

1 * * * * env DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

(ou)

1 * * * * export DISPLAY=:0.0 && /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl

Isso talvez devido ao shell usado por cron sendo sh e não bash (consulte Qual é a diferença entre set, export e env e quando devo usar cada um? ). Também dê uma olhada em O script não é executado via crontab mas funciona bem autônomo .

    
por muru 26.07.2014 / 22:26