关键词:crontab, shell, notify-send, xauth,xhost
写了一个脚本,在终端下运行没有问题:
#!/bin/sh export DISPLAY=:0 time=`awk '{print $1}' /proc/uptime` text="你已经连续开机${time%.*}小时了,请注意休息。系统将于5分钟后关闭,请及时保存." if [ ${time%.*} -ge 7200 ] then notify-send $text fi
但是写到crontal中就是不行:
# m h dom mon dow usercommand
* * * * * root export DISPLAY=:0&&/home/xxx/notify.sh
这是为什么呢?
=======================================
更新: 经过查找原因,修改后OK。
首先,可以通过:/home/notify.sh >> /home/log.txt 2>&1
来deubg,看一下crontab是否有执行。
我的是可以执行的,只是GUI没有显示出来。为什么呢。应该是DISPLAY变量设置有问题。
但是在crontab中是添加了DISPLAY=:0的啊。
后来,看到网上有提到,如果在终端中执行GUI程序,切换用户后要重设DISPLAY变量才可以显示,
那么原因是否就是因为在/home目录下已经有.Xauthority这个文件了,如果用root去执行,这个变量不重设的话是无法显示的;
那我就用原始登录的用户来执行就好了,于是修改为如下:
# m h dom mon dow usercommand * * * * * xxx(myname) export DISPLAY=:0 /home/xxx/notify.sh
大功告成!