简称: 我有一个python脚本,我想作为服务安装它。但是,当作为服务运行时,它会终止,而当作为根用户手动运行时,它不会终止
全部: 我有一个物理HD44780 LCD显示器连接到一个显示各种诊断的服务器。 数据由python脚本收集,该脚本需要使用python2运行并具有root权限。 该脚本本质上是一个收集信息、计算某些值并写入LCD的循环。此后,它会重新进入睡眠状态5秒钟,然后再次进入睡眠状态
我希望将其作为服务运行,并遵循本教程: Run python script at startup with Systemd service
我的Python脚本位于/etc/opt/lcdsysinfo.py中,如下所示:
def runCycle():
calculate values....
time.sleep(5) <--line 121
print on lcd
while True:
runCycle() <-- line 170
服务文件位于/etc/systemd/system/lcdsysinfo.service
[Unit]
Description=Service running system info LCD
After=network.target
[Service]
Type=simple
PIDFile=/var/run/lcdsysinfo.pid
ExecStart=/usr/bin/python2 "/etc/opt/lcdsysinfo.py >>/var/log/lcdsysinfo.log 2>&1"
TimeoutStartSec=0
Restart=on-failure
[Install]
WantedBy=default.target
我在/var/log/lcdsysinfo.log上有一个可写的文本文件
做完这件事后,我跑了
sudo systemctl enable lcdsysinfo
sudo systemctl start lcdsysinfo
显示器上什么也没发生如果我看
systemctl status lcdsysinfo
我会得到
lcdsysinfo.service - Service running system info LCD
Loaded: loaded (/etc/systemd/system/lcdsysinfo.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2020-01-05 16:04:17 CET; 9min ago
Main PID: 6469 (code=exited, status=2)
Jan 05 16:04:17 bo-stationary systemd[1]: lcdsysinfo.service: Service hold-off time over,
scheduling restart.
Jan 05 16:04:17 bo-stationary systemd[1]: lcdsysinfo.service: Scheduled restart job, restart
counter is at 5.
Jan 05 16:04:17 bo-stationary systemd[1]: Stopped Service running system info LCD.
Jan 05 16:04:17 bo-stationary systemd[1]: lcdsysinfo.service: Start request repeated too
quickly.
Jan 05 16:04:17 bo-stationary systemd[1]: lcdsysinfo.service: Failed with result 'exit-
code'.
Jan 05 16:04:17 bo-stationary systemd[1]: Failed to start Service running system info LCD.
如果我将日志文件cat到/var/log/lcdsysinfo.log,我会得到
/usr/bin/python2: can't open file '/etc/opt/lcdsysinfo.py': [Errno 13] Permission denied
Traceback (most recent call last):
File "/etc/opt/lcdsysinfo.py", line 170, in <module> runCycle()
File "/etc/opt/lcdsysinfo.py", line 121, in runCycle
time.sleep(sleepIntervalSecs)
KeyboardInterrupt
我做错了什么
在我看来,这与使循环进入睡眠状态有关,但我有一些随着时间的推移而完成的计算,因此我真的会使用python循环并将统计信息保存在内存中,而不是读取并保存到文件以保持状态,并以类似cron的方式调用脚本
目前没有回答
相关问题 更多 >
编程相关推荐