【问题标题】:Running a python script from crontab从 crontab 运行 python 脚本
【发布时间】:2010-07-21 17:53:24
【问题描述】:

我有一个 python 程序,它通过 crontab 运行并且运行良好。但是,我决定添加通知我它正在做什么的功能,但它突然失败了。它从命令行运行,但是,将其作为 crontab 程序运行会导致它失败

libnotify-Message: Unable to get session bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

我做错了什么?

编辑 我希望这个程序仍然从 cron 运行,并能够利用通知用户它的工作。有没有办法做到这一点?

编辑 2 我尝试过使用 root 的 crontab 和 sudo -u esr python script.py 但这也失败了,默默地。

编辑 3 有可能的!这是代码。

* * * * * su $user -c "DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(ps -au esr | grep -i "gnome-session" | awk '{ print $1 }')/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//') $(whereis notify-send | awk '{ print $2 }') -u normal -t 20000 \"Hello\" "

【问题讨论】:

  • 您可以使用sendmail 通知用户程序的结果。
  • sendmail 可以,但它与使用日志存储结果一样有效,不幸的是,这并不是我真正想要的。

标签: python crontab notify


【解决方案1】:
* * * * * su esr -c "DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(ps -au esr | grep -i "gnome-session" | awk '{ print $1 }')/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//') $(whereis notify-send | awk '{ print $2 }') -u normal -t 20000 \"Hello\" "

根据建议,an explanation,很遗憾不是我的

【讨论】:

  • 我认为如果你能解释这行的每一部分及其作用,对其他人会有所帮助。
【解决方案2】:

您正在尝试在无法使用上述资源的环境中运行需要用户资源的脚本。如果你想让它工作,你将不得不剥离所有对 PyGTK 和会话总线的引用的脚本。

【讨论】:

  • 有道理,但我想利用通知,有没有办法从 crontab 中做到这一点?
【解决方案3】:

我只想提一下,以下配方适用于超棒窗口管理器的用户:

*/1 * * * * DBUS_SESSION_BUS_ADDRESS=$(grep -zi DBUS /proc/$(pgrep awesome)/environ | sed -r -e 's/^DBUS_SESSION_BUS_ADDRESS=//') DISPLAY=":0.0" notify-send -t 0 blah blah

【讨论】:

    【解决方案4】:

    您正在尝试对无法访问图形终端的 cron 程序使用 GUI(GTK+ 库调用)。当你从 cron 运行它时,你需要避免创建对话框和窗口。

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 2015-10-05
      • 2017-12-16
      • 1970-01-01
      • 2013-07-05
      • 2018-08-10
      • 2016-03-06
      相关资源
      最近更新 更多