守护python脚本的必要条件是什么?

时间:2019-07-05 08:48:42

标签: python freebsd python-daemon

我有一个python脚本,需要在启动时作为守护程序运行。该进程与tty(和pdb)分离,但是代码无法运行。

我将范围缩小到一个最小的例子

import daemon
from time import sleep
f1 = open('out.txt','a')
with daemon.DaemonContext():
   while(1):
       f1.write('this is a test')
       sleep(5)

我希望脚本保持运行状态,并每5秒向out.txt添加一行,但是该脚本只是与tty(或pdb)分离,而ps -ax表明python解释器不再运行。 out.txt已创建,但保留为空

1 个答案:

答案 0 :(得分:0)

您可能想使用process supervisor

要简化过程并提供一个不依赖于systemd(仅适用于Linux)的便携式解决方案,您可以在FreeBSD中安装例如immortal,只需执行以下操作:

pkg install immortal

然后使用以下内容创建一个your-script.yml

cmd: sleep 3

并通过以下方式对其进行守护进程

$ immortal -c test.yml

要检查状态,可以使用immortalctl

$ immortalctl    
  PID     Up   Down   Name      CMD
29993   0.0s          test   sleep 3

如果要使其即使在重新启动后也始终启动,只需将脚本(在FreeBSD中)移动到/usr/local/etc/immortal/your-script.yml,查看有关immortaldir的更多信息

您可以添加更多选项,例如:

cmd: iostat 3
log:
    file: /tmp/iostat.log
    age: 10  # seconds
    num: 7   # int
    size: 1  # MegaBytes
require_cmd: test -f /tmp/foo

有关更多示例,请检查:https://immortal.run/post/run.yml/