我试图将Python脚本作为系统服务运行,但该服务未启动。这是我的配置:
pyntp.service
:
[Unit]
Description=Python NTP Service
After=multi-user.target
[Service]
Type=forking
ExecStart=/usr/bin/python $HOME/ntp/ntpservice.py
[Install]
WantedBy=multi-user.target
ntpservice.py
:
#!/usr/bin/python
import os
import time
import json
pid = os.fork()
if pid == 0:
print 'parent'
else:
print 'child'
while True:
print('123')
time.sleep(1)
启动服务的步骤如下:
cp pyntp.service /etc/systemd/system/
cp ntpservice.py /usr/local/bin/
systemctl daemon-reload
systemctl enable pyntp.service
systemctl start pyntp.service
问题是,当我尝试查看pyntp服务的状态时,总是这样:
● pyntp.service - Python NTP Service
Loaded: loaded (/usr/lib/systemd/system/pyntp.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Wed 2018-11-14 22:27:56 CST; 34min ago
Process: 801 ExecStart=/usr/bin/python $HOME/ntp/ntpservice.py (code=exited, status=0/SUCCESS)
Main PID: 801 (code=exited, status=0/SUCCESS)
Nov 14 22:27:56 HES1 systemd[1]: Started Python NTP Service.
Nov 14 22:27:56 HES1 systemd[1]: Starting Python NTP Service...
有人可以帮我解决这个问题吗?谢谢。
答案 0 :(得分:1)
您的程序运行正常。仅fork
ing不足以创建守护程序。发生的事情是您的代码在其父进程运行时一直在运行,然后(两个分叉)在父进程终止时退出。您想要的是编写一个守护进程(并由systemd控制)。您可能会发现此问题对解释一些简单的方法很有用:How do you create a daemon in Python?
fork
是此过程的重要组成部分,但仅凭fork
本身并不能完全解决问题。如果您想查看有关如何使用fork
手动守护进程的更详细的示例,请阅读:Python code to Daemonize a process?