【问题标题】:`notify-send` works when invoking script manually, but not from a crontab`notify-send` 在手动调用脚本时有效,但不能从 crontab
【发布时间】:2019-10-11 13:18:51
【问题描述】:

我希望我的 cron 作业在执行时通过 Ubuntu 上的 notify-send 命令在桌面上向我报告。我已经阅读了说明 shell 脚本无法访问显示的常见问题,通过在调用 notify-send 之前添加此问题来解决:

export DISPLAY=:0.0

所以我在这方面没问题。

我现在所处的位置是,如果我从终端手动调用它,而不是从crontab 调用,我的脚本可以在桌面上运行并通知我。

情况如下:

  1. 执行的脚本是一个 PHP 文件。调用 shell 命令的 PHP 命令是:
<?php
`export DISPLAY=:0.0 && command -v notify-send && notify-send "Hello world"`; 

(PHP 中的反引号表示在 shell 中执行)

  1. 在这两种情况下,我都以root 运行它
  2. 从终端测试时,我运行:
sudo -u root /usr/bin/php -q /var/www/html/cron.php &> /dev/null

这可行,我会收到桌面通知

  1. 要为root 用户编辑我的crontab,我使用:
sudo -u root crontab -e
  1. 在我的crontab 文件中,我的行是这样的:
* * * * * /usr/bin/php -q /var/www/html/cron.php &> /dev/null

这个不会产生桌面通知,即使脚本 100% 执行(我在日志文件中有成功的结果)。

这里出了什么问题,为什么我没有收到桌面通知?

【问题讨论】:

  • 我建议将您的脚本放在.sh 文件中,并在文件开头添加export PATH=$PATH:...。希望它应该能够从 crontab 执行它。

标签: bash cron notify-send


【解决方案1】:

您必须在脚本中设置 PATH 或从 crontab 中导出它!

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 2021-03-12
    • 2014-07-31
    • 1970-01-01
    • 2013-11-28
    • 2018-05-06
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多