systemd:为什么这个服务不活动(死)?

Job*_*r69 3 python systemd

我只是想守护这个简单的 python 脚本:

#!/usr/bin/python3
print('hello')
Run Code Online (Sandbox Code Playgroud)

这是我的命令和状态:

root@gw-0317STLG0067 /lib/systemd/system # systemctl enable test.service
root@gw-0317STLG0067 /lib/systemd/system # systemctl daemon-reload
root@gw-0317STLG0067 /lib/systemd/system # systemctl start test.service
root@gw-0317STLG0067 /lib/systemd/system # systemctl status test.service
* test.service - My Script Service
   Loaded: loaded (/usr/lib/systemd/system/test.service; enabled; vendor preset:
   Active: inactive (dead) since Sun 2016-07-31 10:06:29 UTC; 4s ago
  Process: 20620 ExecStart=/root/test.py (code=exited, status=0/SUCCESS)
 Main PID: 20620 (code=exited, status=0/SUCCESS)

Jul 31 10:06:29 gw-0317STLG0067 systemd[1]: Started My Script Service.
Jul 31 10:06:29 gw-0317STLG0067 test.py[20620]: hello
Run Code Online (Sandbox Code Playgroud)

这里是我的服务脚本:

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=simple
ExecStart = /root/test.py

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

为什么它死了,当你守护打印语句时到底应该发生什么?它应该炸毁终端吗?

Jal*_*eks 5

您的脚本通常作为服务启动,结束得非常快(因为只有一个命令并且没有 while 循环或类似的命令重新执行它),因此服务结束得更快,然后您可以询问其状态。尝试添加一些循环(超时不会对您的日志发送垃圾邮件)以便能够看到它处于活动状态:

while True:
    print('hello')
    time.sleep(2)
Run Code Online (Sandbox Code Playgroud)

并在您看到(使用journalctl -u test.service)足够多后立即通过 systemctl 杀死它。