【发布时间】:2019-07-30 15:07:50
【问题描述】:
我对 bash 脚本没有太多经验,但我从互联网上得到了这个想法。
我的 bash 脚本在计算机空闲一段时间后使用 xprintidle 关闭。
我可以在终端运行脚本没有任何问题。 但是当 /etc/systemd/system/poweroff.service 调用脚本时,它会在 systemctl 状态中给出错误。
Jul 30 16:43:40 godo systemd[1]: Started autopoweroff.
Jul 30 16:43:42 godo bash[3107]: couldn't open display
Jul 30 16:43:42 godo bash[3107]: /usr/local/bin/poweroff.sh: line 5: [: : integer expression expected
Jul 30 16:43:42 godo bash[3107]: end
这是脚本:
#!/bin/bash
sleep 2
myidle=$(xprintidle)
myidletime=$((10000))
while [ "$myidle" -le "$myidletime" ]; do
echo $myidle
sleep 1
myidle=$(xprintidle)
done
#sudo shutdown -P now
#shutdown -P 5
echo "end"
这里是服务:
[Unit]
Description=autopoweroff
[Service]
ExecStart=/bin/bash /usr/local/bin/poweroff.sh
[Install]
WantedBy=multi-user.target
我希望你能帮助我,我不会在这些初学者问题上浪费你的时间。
谢谢
【问题讨论】:
-
xprintidle的输出是什么? -
couldn't open display可能会被xprintidle写入stderr,而不会写入stdout,空的不是有效的整数。可以检查 xprintidle 的退出状态myidle=$(xprintidle) || exit 1以防止继续执行 -
xprintidle 的退出状态为 status=1/FAILURE 。
-
$((10000))没有做任何有用的事情;myidletime=10000是等价的。
标签: linux bash service ubuntu-18.04 systemd