Python如何处理systemctl停止?

时间:2017-04-30 22:25:04

标签: python linux systemd

我有一个作为服务运行的Python脚本。它写入磁盘。如果用户在服务上调用systemctl stop,我想以自己的方式处理该命令,以降低文件损坏的风险。

如何捕获systemctl stop命令?

/ usr / lib / systemd / system中的文件是:

[Unit]
Description=foo

[Service]
Type=simple
ExecStart=/usr/bin/python /srv/go.py
User=jon
Restart=always

[Install]
WantedBy=graphical.target

我的Python脚本是:

#!/usr/bin/python

import time
import datetime
import threading

def worker():
    while True:

        with open('/tmp/go.txt', 'a') as f:
            s = str(datetime.datetime.utcnow()) + '\n'
            f.write(s)
            print(s)

            time.sleep(1)


if __name__=='__main__':
    t = threading.Thread(target=worker)
    t.start()

1 个答案:

答案 0 :(得分:8)

systemd documentation中所述,流程将会收到SIGTERM,然后会立即收到SIGHUP。一段时间后,SIGKILL将被发送。

所有信号以及发送它们的策略都可以在相关的服务文件中更改。

请参阅another stackoverflow question以了解如何在Python程序中处理这些信号。