Что необходимо для того, чтобы демонизировать скрипт на Python? - PullRequest
3 голосов
/ 05 июля 2019

У меня есть скрипт 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)

Я ожидаю, что скрипт продолжит работатьи добавление строки в out.txt каждые 5 секунд, но скрипт просто отсоединяется от tty (или pdb), а ps -ax показывает, что интерпретатор python больше не работает.out.txt создан, но остается пустым

1 Ответ

0 голосов
/ 06 июля 2019

Возможно, вы захотите использовать супервизор процесса .

Чтобы упростить процесс и получить переносимое решение, не зависящее, например, от systemd (только для Linux), вы можете установить, например, immortal , во FreeBSD просто нужно сделать:

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/

...