我有一个作为服务运行的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()
答案 0 :(得分:8)
如systemd documentation中所述,流程将会收到SIGTERM
,然后会立即收到SIGHUP
。一段时间后,SIGKILL
将被发送。
所有信号以及发送它们的策略都可以在相关的服务文件中更改。
请参阅another stackoverflow question以了解如何在Python程序中处理这些信号。