【问题标题】:Notification as a cron job通知作为 cron 作业
【发布时间】:2011-06-01 15:53:32
【问题描述】:

我编写了一个 python 应用程序,它作为 cron 作业运行良好。后来我添加了一些库(例如pynotify 和其他 *),因为我希望收到描述正在发生的事情的消息的通知,但似乎 cron 无法运行这样的应用程序。

您知道如何每五分钟运行一次此应用程序吗?我正在使用 Xubuntu。

  • import gtk, pygtk, os, os.path, pynotify

我可以在没有 cron 的情况下毫无问题地运行应用程序。

Cron 似乎在运行应用程序,但它不会显示通知消息。在/var/log/cron.log 中没有错误。应用程序每分钟执行一次,没有问题。

我的 crontab: */1 * * * * /home/xralf/pythonsrc/app

谢谢

【问题讨论】:

  • 详情详情。你得到什么错误?
  • @Nofaul Ibrahim 添加了详细信息。

标签: python cron


【解决方案1】:

如果你的 python 脚本本身运行良好并且只在cron 中失败,那么很可能库的路径没有在 cron 中设置。这是我的一个 cronjobs 的示例,我在执行文件之前添加了 cron 的路径

00 12 * * * LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib && export LD_LIBRARY_PATH && /path/to/my/script

您必须将上面的路径替换为您的库的相应路径。

【讨论】:

    【解决方案2】:

    如果 cron 作业以“您”身份运行,并且您设置了 DISPLAY var (export DISPLAY=:0),您应该没有问题。

    【讨论】:

    • 你必须更具体。你有什么错误吗?如果您没有任何错误,是否有邮件代理向您发送 cron 错误?它会默默地失败吗?
    • 基本上,您的运行会话和 cron 之间的环境似乎有所不同。例如,您的应用程序可能正在确定(通过库支持)您无法运行 X 应用程序或类似的东西。例如,放入 shell 并执行“echo $DISPLAY”。这说明了什么?
    • echo $DISPLAY 显示:0.0 如果我打电话给export DISPLAY=:0 它显示:0
    • 然后尝试将 DISPLAY 设置为 :0.0
    • @EightyEight :0.0 没有帮助。
    【解决方案3】:

    我没有看到 pynotify 的 cron 作业有任何问题?您遇到什么错误?

    你能单独运行你的 python 代码来检查你的 python 代码是否运行良好,但只在 cron 时失败?

    Celery 是用 Python 编写的分布式作业队列和任务管理器,但它可能无法满足您的需求。

    如果您知道您的程序将在 5 分钟内关闭,Supervisord 也可以执行某种 cron 任务。因此,您可以配置 supervisord 以在不久之后启动任务。它们都不像 cron 作业那样容易。

    【讨论】:

    • 我在问题中添加了更多信息。
    • 他正在导入 GTK,如果他的 cron 作业尝试运行 GTK 应用程序,它将失败,因为 cron 守护进程无法访问 X 服务器。
    【解决方案4】:

    您最可能的问题是路径问题。除非您专门设置,否则 Cron 没有用户路径。因此,如果您的库安装在非标准位置或用户帐户中,cron 将需要完整路径,否则您需要在 crontab 文件中设置路径变量。

    添加行

    PATH=/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/any/other/path
    

    到你的 crontab 文件,看看它是否有效。

    【讨论】:

      猜你喜欢
      • 2015-09-24
      • 2022-01-23
      • 1970-01-01
      • 2014-07-29
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多