在我编写的脚本结束时,我想发送一个通知以了解它何时结束。除了通知部分之外,脚本的内容并不重要。
以下是脚本的重要部分:
#!/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:未找到命令
这个错误是不言自明的,并帮助我找到了问题。