Відповіді:
Запустіть, nohup python bgservice.py &
щоб скрипт ігнорував сигнал затримки і продовжував працювати. Вихід буде поставлений nohup.out
.
В ідеалі ви б запустили свій сценарій з чимось подібним, supervise
щоб його можна було перезапустити, якщо (коли) він загине.
somecommand &
це зробите, він надрукує pid, як [1] 12345
. інакше можна використовувати $!
.
Якщо ви вже запустили процес і не хочете його вбивати і перезапустити під нохупом, ви можете надіслати його на другий план, а потім відключити його.
Ctrl+Z
(призупинити процес)
bg
(перезапустіть процес у фоновому режимі
disown %1
(припустимо, що це робота №1, використовуйте jobs
для визначення)
Ви можете розглянути можливість перетворення сценарію python у належний демон python, як описано тут .
пітон-демон є хорошим інструментом, який можна використовувати для запуску сценаріїв python як фоновий процес демон, а не назавжди запущений сценарій. Вам потрібно буде трохи змінити існуючий код, але його простий і простий.
Якщо у вас виникли проблеми з python-daemon, є ще один керівник утиліти, який зробить те ж саме, але в цьому випадку вам не доведеться писати будь-який код (або змінювати існуючий), оскільки це нестандартне рішення для демонстрації процесів.
Ви не можете нічого, але я віддаю перевагу екрану .
Ось просте рішення всередині python за допомогою декоратора:
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
Звичайно, замість цього можна замінити вміст bgservice.py
файлу my_func
.
ЗШ оболонка має можливість зробити все фонові процеси запускаються з поЬір.
В ~/.zshrc
додати наступні рядки:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
Тоді вам просто потрібно запустити такий процес, як:: python bgservice.py &
і вам більше не потрібно використовувати команду nohup.
Я знаю, що не багато людей використовують zsh, але це дійсно крута оболонка, яку я б рекомендував.
Якщо вам потрібно, щоб процес запускався вічно, незалежно від того, входите ви чи ні, розгляньте запуск процесу як демон.
supervisord - це чудове нестандартне рішення, яке можна використовувати для демонстрації будь-якого процесу. У нього є ще одна утиліта контролю, supervisorctl
яка може використовуватися для моніторингу процесів, якими керує керівник.
Вам не потрібно писати зайвого коду чи змінювати існуючі сценарії, щоб зробити цю роботу. Більше того, багатослівна документація значно спрощує цей процес.
Після того, як годинами чухати голову навколо пітона-демона, супервізор - це рішення, яке працювало на мене за лічені хвилини.
Сподіваюсь, це допомагає комусь, хто намагається змусити пітон-демона працювати
Ви також можете використовувати Yapdi :
Основне використання:
import yapdi daemon = yapdi.Daemon() retcode = daemon.daemonize() # This would run in daemon mode; output is not visible if retcode == yapdi.OPERATION_SUCCESSFUL: print('Hello Daemon')
Спробуйте це:
nohup python -u <your file name>.py >> <your log file>.log &
Ви можете виконати команду над екраном і вийти з екрана.
Тепер ви можете створити хвостові журнали сценарію python: tail -f <your log file>.log
Щоб убити ваш сценарій, ви можете використовувати ps -aux та команди kill .
nohup: ignoring in put and appending output to
nohup.out'`, а коли натискаю клавішу enter, процес завершується зі статусом 1. Що відбувається?