Odpowiedzi:
Uruchom, nohup python bgservice.py &
aby skrypt zignorował sygnał rozłączenia i działał dalej. Wyjście zostanie wprowadzone nohup.out
.
Idealnie byłoby, gdybyś uruchomił skrypt z czymś w rodzaju, supervise
aby można go było uruchomić ponownie, jeśli (kiedy) umrze.
somecommand &
tej czynności wypisze pid jak [1] 12345
. w przeciwnym razie możesz użyć $!
.
Możesz także użyć ekranu GNU, który powinien mieć prawie każdy system Linux / Unix.
Jeśli korzystasz z Ubuntu / Debiana, jego ulepszona wersja byobu też jest całkiem fajna.
Możesz rozważyć przekształcenie skryptu Pythona w odpowiedniego demona Pythona, jak opisano tutaj .
python-daemon to dobre narzędzie, którego można używać do uruchamiania skryptów języka Python jako procesu demona w tle, a nie wiecznie działającego skryptu. Będziesz musiał nieco zmodyfikować istniejący kod, ale jest prosty i prosty.
Jeśli masz problemy z demonem Pythona, istnieje inny kierownik narzędzia , który zrobi to samo za Ciebie, ale w tym przypadku nie będziesz musiał pisać żadnego kodu (ani modyfikować istniejącego), ponieważ jest to gotowe rozwiązanie do demonizacji procesy.
Nie możesz tego zrobić, ale wolę ekran .
Oto proste rozwiązanie w Pythonie za pomocą dekoratora:
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
Możesz oczywiście zastąpić zawartość swojego bgservice.py
pliku zamiast my_func
.
Zsh powłoka posiada opcję, aby wszystkie procesy uruchomione w tle z nohup.
W ~/.zshrc
dodaj linie:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
Następnie wystarczy uruchomić taki proces: python bgservice.py &
i nie trzeba już używać polecenia nohup.
Wiem, że niewiele osób używa zsh, ale to naprawdę fajna powłoka, którą bym polecił.
Jeśli potrzebujesz, aby proces działał wiecznie, bez względu na to, czy jesteś zalogowany, czy nie, rozważ uruchomienie procesu jako demona.
supervisord to świetne, gotowe do użycia rozwiązanie, którego można użyć do demonizacji dowolnego procesu. Posiada inne narzędzie kontrolne, supervisorctl
którego można użyć do monitorowania procesów prowadzonych przez przełożonego.
Nie musisz pisać żadnego dodatkowego kodu ani modyfikować istniejących skryptów, aby to zadziałało. Co więcej, szczegółowa dokumentacja znacznie upraszcza ten proces.
Po godzinach drapania się po głowie po python-demonie, kierownik jest rozwiązaniem, które zadziałało dla mnie w ciągu kilku minut.
Mam nadzieję, że pomoże to komuś próbującemu uruchomić demona Pythona
Możesz także użyć Yapdi :
Podstawowe użycie:
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')
Spróbuj tego:
nohup python -u <your file name>.py >> <your log file>.log &
Możesz uruchomić powyższe polecenie na ekranie i wyjść z ekranu.
Teraz możesz dostosować dzienniki swojego skryptu Pythona przez: tail -f <your log file>.log
Aby zabić swój skrypt, możesz użyć komend ps -aux i kill .
nohup: ignoring in put and appending output to
nohup.out'`, a kiedy naciskam enter, proces kończy się ze statusem 1. Co się dzieje?