我的用户服务是一个 python 脚本,它不会在启动时运行。它作为用户 pi 在 raspbian 操作系统上运行。由于大多数这些问题,我可以启动该服务并且它运行良好,systemctl --user start argus
但它不会在重新启动时启动。
[Unit]
Description=RAL Argus Service
[Service]
Environment=PYTHONUNBUFFERED=1
ExecStart=/usr/bin/python3 /home/pi/RAL/Argus/Hextapus_Base.py -bsi=5 -pupd=59 -bm=1
RemainAfterExit=yes
Restart=no
[Install]
WantedBy=multi-user.target
我已经运行,sudo loginctl --linger $USER
因此即使 pi 用户未登录,该服务也应该运行。
脚本运行从传感器收集数据并在完成数据收集后关闭设备(现在发出 sudo shutdown)。RTC 再次唤醒系统,脚本运行并再次重复该过程。
在启动这里是输出 systemctl --user status argus
pi@raspberrypi:~ $ systemctl --user status argus
â—� argus.service - RAL Argus Service
Loaded: loaded (/home/pi/.config/systemd/user/argus.service; enabled; vendor preset: enabled)
Active: inactive (dead)
这是脚本的要点
def main():
args=cli(argv) #parse args
try:
normal_operation(args)
rtc_time = Hextapus.Get_string_utc_time_pcf(0)
logger.warning("Issuing Shutdown command at RTC Time: {}".format(rtc_time)) #Indicate os shutdown during hard shutdown and RTC time stamp
os.system('sudo shutdown now')
return 0
except KeyboardInterrupt:
#This is so when debugging the loops are killed quickly
logger.warning("Keyboard ESCAPE detected. Shutting Down")
if __name__ == '__main__':
sys.exit(main(sys.argv))
因为当我运行 systemctl --user start argus 时该服务会在 pi 上关闭,所以我在 journalctl 中看到以下内容
Dec 03 20:35:39 raspberrypi python3[27653]: 2020-12-03 20:35:39,502 - WARNING - Issuing Shutdown command at RTC Time: 20201203203543
Dec 03 20:35:43 raspberrypi systemd[385]: Stopping RAL Argus Service...
Dec 03 20:35:43 raspberrypi systemd[385]: argus.service: Main process exited, code=killed, status=15/TERM
Dec 03 20:35:43 raspberrypi systemd[385]: argus.service: Succeeded.
Dec 03 20:35:43 raspberrypi systemd[385]: Stopped RAL Argus Service.
后续启动的 journalctl 中没有更多信息来说明服务正在运行或无法启动。我不确定脚本发出关闭的事实是否是我的问题的原因。
谢谢!
您的服务没有启动,因为pi
's 的--user
总线在pi
登录之前不会启动。虽然 Michal 的回答部分正确(您应该使用default.target
而不是multi-user.target
in--user
模式),但最好的答案是将您的服务放在系统总线上。
如果你想在不pi
登录的情况下运行这个服务,那就把它放在系统总线上。这包括:
mv ~/.config/systemd/user/argus.service /etc/systemd/system/
User=pi
到 的[Service]
部分argus.service
。现在您的脚本拥有与pi
在用户总线上运行时相同的所有权限,除了它独立于用户登录状态运行。唯一的缺点是您sudo
在使用systemctl
或处理此单元时需要运行journalctl
。
--user
总线的主要优点是允许用户使用systemctl
或journalctl
不sudo
管理特定服务。它还允许根据用户的登录或注销来启动和停止服务。由于您的服务需要在没有用户输入且没有用户登录触发器的情况下启动,因此系统总线是最佳位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句