Bir program hizmet olarak nasıl çalıştırılır (sessiz)?


23

Terminalden başladığım bir python tabanlı sunucum var. Terminalin bu özel örneği daha sonra programa kontrol sağlar ve program kapatılana kadar bir tür kayıt penceresi olarak kullanır. Bu normal mi, yoksa bir şekilde programı aktif bir süreç olarak göstereceği başka bir yolla başlatmaya çalışmalı mıyım? Programı başlattığım terminali kapatırsam, program onunla birlikte ölür.

teşekkür ederim


PHP bu cevapta belirtilmiştir ancak Python için de geçerlidir: askubuntu.com/questions/26555/running-php-cli-server/…

Yanıtlar:


9

Eski bash bile & arka plan işlemlerini göndermek için kullanıyor, ancak başka yolları da var .. ama temel iki bunlar:

1.)$~ your_command > outputfile_for_stdout &
        # runs your command in background, giving you only PID so you can exit that process by `kill -9 PID_of_process`
        # & goes at the end of row      


2.)$~ your_command > outputfile_for_stdout 
        # this will run your program normally
        # press  Ctrl + Z then program will pause
   $~ bg
        # now your program is running in background
   $~ fg
        # now your program came back to foreground
3.)you can run terminal window under screen command so it will live until you either kill it or you reboot your machine
   $~ screen
   $~ run_all_your_commands
       # Ctrl + A + D will then detach this screen
   $~ screen -r will reattach it

Diğer bazı faydalı komutlar:

   $~ jobs
        # will show you all processes running right now, but without PID
   $~ ps
        # will show you all processes for actual terminal window

Hmmm, şu ana
kadarki

Harika çözüm Pid bir dosyaya kaydedilecek şekilde 1. seçeneğini değiştirmenin bir yolu var mı. Böylece bir günlük dosyası ve bir pid dosyası üretilir.
Oğuz Bilgiç

27

Bir servise çevirin (servis)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

Terminalden siz de çalıştırabilir screenveya takip edebilirsiniz &. Sürekli işlemleri yürütmenin kolay yolu.


Sadece &bu durumda süreç arka plan kullanarak bence, çok az. OP, sunucusunun stdout'a giriş yaptığını belirtir, böylece &terminali ile çıktılar. Ayrıca OP terminali kapattığından beri , OP işlemi tekrar ön planlayamayacak ve tüm log çıkışı kaybolacaktır. En iyisi, en azından, onu bir günlük dosyasına yönlendirmek ya da screenkurulumla devam etmek - ancak daha sonra lütfen screenOP'nin temelini (ayırmak / takmak / etc) açıklamak
Robert Riedl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.