web-dev-qa-db-ja.com

Cronは機能しませんが、コマンドは機能します

私のcrontabは次のようなものです(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'

また、このファイルを作成しました

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

Crontabで説明されているようにコマンドを実行すると、これらの両方が機能します。

私がいくつかのステップを逃したかどうか教えてもらえますか?


編集:

スクリプトファイルを作成し、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

これはcrontabです

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

cronは、テストフォルダーを作成できるため機能します。しかし、cron内でgsettingsを実行するにはどうすればよいですか?

1
Nikhil

提案してくれたTomášPospíšekに感謝します。

スクリプトに次を追加します。

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

Cronが機能していないことを確認していますか?次のような行を追加する場合

 */1 * * * touch /tmp/foobar123

crontabに追加すると、ファイルは/tmpに表示されますか?

そのファイルが1分ほど経っても表示されない場合は、

ps auxw | grep cron

または

Sudo service cron status

Cronが実行されていない場合は、cronで起動してみてください

Sudo service cron start

しかし、上記のコマンドの問題は、gsettingsを実行するためにcronの環境を正しく設定する必要があることです。

2