Yanıtlar:
Run nohup python bgservice.py &
mesele sinyalini görmezden ve çalışmasını sağlamak için komut dosyası almak için. Çıktı alınacaktır nohup.out
.
İdeal olarak, komut dosyanızı böyle bir şeyle çalıştırırsınız, supervise
böylece ölürse (ne zaman) yeniden başlatılabilir.
somecommand &
pid gibi basılacaktır [1] 12345
. aksi takdirde kullanabilirsiniz $!
.
İşlemi zaten başlattıysanız ve onu öldürmek ve nohup altında yeniden başlatmak istemiyorsanız, arka plana gönderebilir ve sonra reddedebilirsiniz.
Ctrl+Z
(süreci askıya alın)
bg
(işlemi arka planda yeniden başlatın
disown %1
(bunun 1. iş olduğunu varsayarak jobs
belirlemek için kullanın )
Hemen hemen her Linux / Unix sisteminde olması gereken GNU ekranını da kullanabilirsiniz .
Ubuntu / Debian üzerindeyseniz, geliştirilmiş versiyonu byobu da oldukça hoş.
Python betiğinizi burada açıklandığı gibi uygun bir python arka plan programına dönüştürmeyi düşünebilirsiniz .
python-daemon , python komut dosyalarını sonsuza kadar çalışan bir komut dosyası yerine bir arka plan daemon işlemi olarak çalıştırmak için kullanılabilecek iyi bir araçtır. Mevcut kodu biraz değiştirmeniz gerekecek, ancak sade ve basit.
Python-daemon ile sorun yaşıyorsanız, sizin için aynısını yapacak başka bir yardımcı program yöneticisi vardır, ancak bu durumda herhangi bir kod yazmanıza (veya mevcut olanı değiştirmenize) gerek kalmayacaktır, çünkü bu daemonizing için kutunun dışında bir çözümdür. süreçler.
Kabul edemezsin, ama ben ekranı tercih ederim .
İşte bir dekoratör kullanarak python içinde basit bir çözüm:
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
Dosyanızın içeriğini elbette yerine değiştirebilirsiniz my_func
.
Zsh kabuk nohup ile çalışan tüm arka plan işlemleri yapmak için bir seçenek vardır.
Gelen ~/.zshrc
satırları ekleyin:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
O zaman böyle bir işlemi çalıştırmanız yeterlidir: python bgservice.py &
ve artık nohup komutunu kullanmanıza gerek kalmaz.
Pek çok kişinin zsh kullanmadığını biliyorum, ama bu gerçekten tavsiye edebileceğim harika bir kabuk.
İhtiyacınız olan şey, oturum açmış olsanız da olmasanız da işlemin sonsuza kadar çalışması gerektiğiyse, işlemi bir arka plan programı olarak çalıştırmayı düşünün.
Supervisord , herhangi bir süreci daemonize etmek için kullanılabilecek harika bir çözümdür. supervisorctl
Süpervizör tarafından çalıştırılan süreçleri izlemek için kullanılabilecek başka bir kontrol aracı vardır.
Bunun çalışması için fazladan kod yazmanıza veya mevcut komut dosyalarını değiştirmenize gerek yoktur. Dahası, ayrıntılı dokümantasyon bu süreci çok daha basit hale getirir.
Python-daemon etrafında saatlerce kafamı kaşıdıktan sonra, süpervizör dakikalar içinde benim için çalışan çözüm oldu.
Umarım bu, python-daemon'u çalıştırmaya çalışan birine yardımcı olur
Ayrıca Yapdi'yi de kullanabilirsiniz :
Temel kullanım:
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')
Bunu dene:
nohup python -u <your file name>.py >> <your log file>.log &
Yukarıdaki komutu ekranda çalıştırıp ekrandan çıkabilirsiniz .
Artık python betiğinizin günlüklerini şu şekilde takip edebilirsiniz: tail -f <your log file>.log
Komut dosyasını öldürmek için ps -aux ve kill komutlarını kullanabilirsiniz.
nohup: ignoring in put and appending output to
alıyorum ve enter'a bastığımda işlem durum 1 ile çıkıyor. Neler oluyor?