Come avviare lo script di shell interattivo in bash ogni ora con cron?

2

Ho inserito questa riga nel crontab:

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

Lo script è eseguibile.

Se incolli quel comando nel terminale, cioè la stringa senza stelle, funziona perfettamente:

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

Ho provato:

sudo service cron restart

Ma il problema persiste. Come posso ottenere cron per eseguire quel comando ogni ora?

Aggiornamento. Ho funzionato con ROOT crontab:

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

1 risposta

5

Credo che la mia prima ipotesi sul modo in cui viene gestita la variabile DISPLAY sia errata. Penso che il problema sia in qualche modo correlato a cron usando una shell non interattiva. Impossibile eseguire uno script di test che utilizza un ciclo read infinito. Tuttavia, quando ho provato aprendo una nuova scheda:

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

ha funzionato bene.

In base a questa domanda SU e questo post dei forum di Ubuntu , potresti aver bisogno di export della variabile $DISPLAY o usare env :

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

(o)

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

Questo forse a causa della shell usata da cron che è sh e non di bash (vedi Qual è la differenza tra set, export ed env e quando dovrei usarli? ). Dai anche un'occhiata a Script non viene eseguito tramite crontab ma funziona bene standalone .

    
risposta data muru 26.07.2014 - 22:26

Leggi altre domande sui tag