首页 > 解决方案 > `notify-send` 在手动调用脚本时有效,但不能从 crontab

问题描述

notify-send我希望我的 cron 作业在执行时通过Ubuntu 上的命令在桌面上向我报告。我已经阅读了说明 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. crontab要为用户编辑我的root,我使用:
sudo -u root crontab -e
  1. 在我的crontab文件中,我的行是这样的:
* * * * * /usr/bin/php -q /var/www/html/cron.php &> /dev/null

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

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

标签: bashcronnotify-send

解决方案


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

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

推荐阅读