【发布时间】:2020-06-14 22:23:09
【问题描述】:
我有一个监控笔记本电池电量的简单脚本。我如何设置我的 *.service 文件有什么问题,因为我不断收到(code=exited, status=1/FAILURE) 错误。
batterylevel-warning.sh
权限设置为 777。
#!/bin/bash
CRITICAL_PERCENTAGE=`cat /sys/class/power_supply/BAT0/capacity`
STATUS=`cat /sys/class/power_supply/BAT0/status`
ICON="/usr/share/icons/Paper/512x512/status/battery-low.png"
if [ $STATUS == "Discharging" ]; then
if [ $CRITICAL_PERCENTAGE -eq 20 ]; then
notify-send -u critical -t 2000 -i $ICON "You need to charge your battery now!!! It is at $CRITICAL_PERCENTAGE%!!!"
fi
fi
batterylevel.service
[Unit]
Description=Send alerts on low battery starting at 25%.
[Service]
Type=simple
ExecStart=/bin/bash /home/myhome/.scripts/batterylevel-warning.sh
[Install]
WantedBy=multi-user.target
实施
# Create sym link
sudo ln-s /home/myhome/.scripts/batterylevel.service /etc/systemd/system
# Enable and start
sudo systemctl enable batterylevel.service
sudo systemctl start batterylevel.service
问题:当我的电池电量达到 25% 时,我运行 sudo systemctl status batterylevel.service 并得到:
● batterylevel.service - Send alerts on low battery starting at 25%. Designed for silverlance.
Loaded: loaded (/home/myhome/.scripts/batterylevel.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2020-03-02 23:04:02 PST; 4s ago
Process: 5357 ExecStart=/bin/bash /home/myhome/.scripts/batterylevel-warning.sh (code=exited, status=1/FAILURE)
Main PID: 5357 (code=exited, status=1/FAILURE)
我还在某处运行了sudo systemctl daemon-reload,但仍然没有成功。抱歉,帖子太长了。
【问题讨论】:
-
您的脚本在手动运行而不是服务时是否有效?
-
我建议不要依赖这个测试:
[ $CRITICAL_PERCENTAGE -eq 20 ]。如果您的电池电量从 21% 下降到 19% 而没有达到 20% 的标记,那么即使您可能想要,您也不会收到通知。您应该解决类似[ $CRITICAL_PERCENTAGE -le 20 ](-le而不是eq)之类的问题。 -
journalctl -l是否从您的脚本中给出错误消息?我怀疑它会显示notify-send命令失败,那是错误值来自 -
@vdavid 是的,当我通过
./batterylevel-warning.sh运行它时,它运行良好。我会试试你所说的关于-le的使用。 @Jon 我最好检查一下。