如何显示由 crontab 触发的通知发送消息?

如何显示由 crontab 触发的通知发送消息?

测试.sh:/usr/bin/notify-send "test"

以下工作:bash ~/Documents/test.sh

但是 crontab 从未显示通知。为什么?

*/1 * * * * bash ~/Documents/test.sh

答案1

要从 Cron 执行任何与 GUI 相关的应用程序,您应该导出一些桌面环境变量。以下解决方案是基于这个答案哪里提供了更多详细信息。

如何crontab在 Ubuntu 16.04、17.10、18.04 和其他带有 Gnome 的 Ubuntu 发行版中启动任何 GUI 相关应用程序

创建一个启动脚本,它将导出桌面环境变量并启动您的应用程序。我们将其命名为gui-launcher。其内容应为(参考文献:[1][2][3]):

#!/bin/bash -e

# NAME: gui-launcher

# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done

# Export the current desktop session environment variables
# Sometimes it try to change $UID so we must remove -e option or use 2>/dev/null
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ") 2>/dev/null 

# Execute the input command
nohup "$@" >/dev/null 2>&1 &

exit 0
  • 对于其他桌面环境,请gnome-session在此部分中将其更改$(pgrep gnome-session -n -U $UID)为正在使用的 DE 进程的名称,例如mate-session。Ubuntu 最常用的 DE 列表如下此处介绍. Lubuntu 执行同样的脚本 -这里。该脚本可用于从当前用户的桌面会话中的 TTY 或 SSH 会话启动 GUI 应用程序。
  • 使文件可执行:chmod +x gui-launcher
  • 该脚本将一直工作直到用户登录,包括锁定屏幕。
  • 请不要以 root 身份修改和运行脚本。这可能会对系统造成危害!

crontab然后按以下方式使用它:

*/1 * * * * /full/path/to/gui-launcher "/full/path/to/the-target-application"

以下是它在 Wayland 上的 Ubuntu 17.10 上的运行方式:

在此处输入图片描述


答案2

cron 的环境和常规用户的环境可能不同。

当您在 cron 中使用任何脚本时最好为其提供完整路径。

相关内容