从 systemd 发送通知

从 systemd 发送通知

在我编写的脚本结束时,我想发送一个通知以了解它何时结束。除了通知部分之外,脚本的内容并不重要。

以下是脚本的重要部分:

#!/bin/bash

USER=<username>
USERID=`id -u $USER`

sudo -u $USER bash -c "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USERID/bus notify-send -t 5000 -u normal -i /usr/share/icons/Adwaita/32x32/devices/drive-removable-media.png 'Ah! the element of surprise'"

当我从我的终端运行它时,它运行良好。

/etc/systemd/system我创建了一个包含以下内容的服务文件:

[Unit]
Description=Test notification
Requires=home.mount
After=home.mount

[Service]
ExecStart=/home/alexis/Personnalisation/Scripts/test.notification.sh
Type=oneshot

[Install]
WantedBy=graphical.target

当我运行它时sudo systemctl start test.notification,它运行良好。

当我运行后 systemd 运行时出现问题systemd enable test.notification

如果我在脚本中添加其他内容,它们就完成了。

我的服务描述有误吗?我的通知说明是否缺少某些内容?

答案1

问题是 systemd 在最小环境中运行,并且在脚本执行期间并非所有环境变量都是已知的。为了使其正常工作,我已bash通过进行更改/bin/bash

通过在没有环境的情况下运行脚本,我发现了问题所在:

env -i /path/to/script

返回了以下错误:

sudo:bash:未找到命令

这个错误是不言自明的,并帮助我找到了问题。

相关内容