尽管命令有效,但 Cron 不起作用

尽管命令有效,但 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确实有效,因为它能够创建测试文件夹。但是,我应该怎么做才能gsettings在 cron 中运行?

答案1

你确定 cron 没有工作吗?如果你添加如下一行

 */1 * * * * touch /tmp/foobar123

到你的 crontab,那么该文件会出现在/tmp

如果一分钟后该文件仍未出现,那么

ps auxw | grep cron

或者

sudo service cron status

如果 cron 没有运行,请尝试使用以下命令启动它

sudo service cron start

但是我猜上面的命令的问题是,它gsettings需要正确设置其环境才能运行,而从 运行时它可能没有cron

答案2

感谢 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-)

相关内容