我尝试每天运行一堆脚本/命令。
为此,我配置了一个用户空间 anacron,如下所述这里. Anacron 由 cron 每小时启动一次:
内容/var/spool/cron/rawing
:
@hourly /usr/sbin/anacron -s -t ${HOME}/.anacron/etc/anacrontab -S ${HOME}/.anacron/spool
这很好用。但是,我还没有设法从我的 anacrontab 运行任何图形应用程序。我试过:
@daily 0 gui_test_env env SCREEN=:0 zenity --info
@daily 0 gui_test_screen SCREEN=:0 zenity --info
这两个操作都会失败并显示错误消息
Unable to init server: Could not connect: Connection refused
(zenity:6034): Gtk-WARNING **: cannot open display:
还
@daily 0 notify_test SCREEN=:0.0 && notify-send "foobar"
没有产生错误消息,但也没有显示通知。另一方面,显示桌面通知的 Python 脚本失败,并显示以下消息
Unable to init server: Could not connect: Connection refused
Traceback (most recent call last):
File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
n.show()
GLib.Error: g-spawn-exit-error-quark: Error spawning command line 'dbus-launch --autolaunch=db6d4465f8584b8faa8abfb09b242b95 --binary-syntax --close-stderr': Child process exited with code 1 (1)
如果有关系的话,python 代码如下所示(缩短):
from gi.repository import Notify
Notify.init('test')
n= Notify.Notification.new('title', 'question', "dialog-question")
n.set_urgency(Notify.Urgency.NORMAL)
n.show()
添加xhost local:rawing > /dev/null
到我的~/.bashrc
按照建议这里也没什么帮助。
更新:我已成功使用 运行 GUI 应用程序DISPLAY=:0 XAUTHORITY=/home/rawing/.Xauthority some_gui_app
。但桌面通知仍然不起作用。错误是:
Traceback (most recent call last):
File "/home/rawing/Desktop/folder/python/misc/confirm_run.py", line 36, in <module>
n.show()
GLib.Error: g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files (2)
PS:关于如何实现这一点的建议没有也欢迎 anacron。我以为 anacron 会让这一切变得简单……结果我太乐观了。
答案1
在处理 NAS 上的 cron 时,我了解到直接执行命令通常会适得其反。解决此问题的方法是编写一个在内部完成所有操作的脚本。然后让 cron 任务调用运行良好的脚本。这需要几个特殊操作。
- 编写脚本(这可能和
#!bin/bash
第一行一样简单 - 对所有事物都使用绝对路径(通常,cron 环境在环境中没有路径,如果它有环境的话)
[编辑] 我理解这会跳过问题帖子中提供的很多细节。这在某种程度上是故意的。
经过反复尝试,我终于完成了以下工作。
mkdir -p /home/username/bin/cron
nano -w /home/username/bin/cron/testscreen.sh
(在 nano 中插入以下内容)
#!/bin/bash
/usr/bin/env SCREEN=:0 DISPLAY=:0 XAUTHORITY=/home/username/.Xauthority /usr/bin/zenity --info
保存脚本。
chmod +x /home/username/bin/cron/testscreen.sh
crontab -e
添加以下行,根据您的特定需要调整时间。
20 8 * * * /home/username/bin/cron/testscreen.sh
大多数情况下,我只需要在 xterm 的环境和 cron 的环境之间来回查看,找出缺少的关键部分。为了进行测试,我做了一些快速的操作来让 cron 事件触发“从现在起一分钟”,但我让它工作了,所以它应该对你有用。