web-dev-qa-db-fra.com

Cron ne fonctionne pas, bien que la commande fonctionne

Ma crontab est comme suit (j'essaye de changer mon thème GNOME)

crontab -l
0 5 * * * /usr/bin/gsettings set org.gnome.desktop.interface gtk-theme 'Adapta'
30 21 * * *  /usr/bin/gsettings set org.gnome.desktop.interface gtk-theme 'Adapta-Nokto'

Aussi, j'ai créé ce fichier

echo $USER
nikhil
cat /etc/cron.allow
nikhil

Lorsque j'exécute la commande mentionnée dans crontab, les deux fonctionnent.

Pourriez-vous s'il vous plaît dire si j'ai manqué une étape?


Modifier:

J'ai créé un fichier de script que j'exécute avec cron:

export TERM=xterm-256color
TimeHr=$(date +%H)
if ((${TimeHr}>18 || ${TimeHr}<5)); then
#if [${TimeHr} -gt 11 || ${TimeHr} -lt 5]; then
    mkdir ${HOME}/Documents/TestNight
    /usr/bin/gsettings set org.gnome.desktop.interface gtk-theme 'Adapta'
else
    mkdir ${HOME}/Documents/TestDay
    /usr/bin/gsettings set org.gnome.desktop.interface gtk-theme 'Adapta-Nokto'
fi

C'est crontab

$ crontab -l
36 5,19,23 * * * bash /home/nikhil/GnomeThemeChange
@reboot bash /home/nikhil/GnomeThemeChange

cron fonctionne car il est capable de créer des dossiers de test. Mais que dois-je faire pour lancer gsettings dans cron?

1
Nikhil

Merci à Tomáš Pospíšek pour les suggestions.

Ajoutez ce qui suit au script:

PID=$(pgrep gnome-session | tail -n1)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
0
Nikhil

Êtes-vous sûr que cron ne fonctionne pas? Si vous ajoutez une ligne comme

 */1 * * * touch /tmp/foobar123

dans votre crontab, le fichier apparaît-il dans /tmp?

Si ce fichier n'apparaît pas après une minute ou deux, alors

ps auxw | grep cron

ou

Sudo service cron status

Si cron ne fonctionne pas, essayez de le démarrer avec

Sudo service cron start

Mais je suppose que le problème avec votre commande ci-dessus est que gsettings a besoin que son environnement soit correctement configuré pour pouvoir s'exécuter, ce qu’il n’a probablement pas, lorsqu’il est exécuté à partir de cron.

2
Tomáš Pospíšek