Jak uruchomić program jako usługę (cichy)?


23

Mam serwer oparty na języku python, który uruchamiam z terminala. Ta konkretna instancja terminala daje następnie kontrolę programowi, a program używa go jako swego rodzaju okna rejestrowania, aż do jego zamknięcia. Czy to normalne, czy powinienem w jakiś sposób spróbować uruchomić program w inny sposób, w jaki będzie on po prostu pokazywany jako aktywny proces? Jeśli zamknę terminal, od którego uruchomiłem program, program umiera wraz z nim.

Dziękuję Ci


PHP jest wspomniane w tej odpowiedzi, ale dotyczy to również Pythona: askubuntu.com/questions/26555/running-php-cli-server/…

Odpowiedzi:


9

Nawet stary bash używa & do wysyłania procesów do tła, ale jest też kilka innych sposobów ... ale podstawowe są dwa:

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

Kilka innych przydatnych poleceń:

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

Hmmm,
używałem

Świetne rozwiązanie. Czy istnieje sposób zmodyfikowania opcji 1., aby pid był zapisywany w pliku. Tak więc generowany jest plik dziennika i plik pid.
Oguz Bilgic,

27

Zmień go w demona (usługa)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

Z terminalu możesz także uruchomić screenlub wykonać polecenie, używając &. Łatwy sposób na prowadzenie ciągłych procesów.


&w moim przypadku tylko użycie tła w tym przypadku jest za mało. OP stwierdza, że ​​jego serwer loguje się na standardowe wyjście, więc &jego terminal będzie zaśmiecony danymi wyjściowymi. Ponadto, ponieważ OP wspomina o zamknięciu terminala , OP nie będzie w stanie ponownie wysunąć na pierwszy plan procesu i wszystkie dane wyjściowe dziennika zostaną utracone. Przynajmniej lepiej, aby przekierować go do pliku dziennika lub pozostać przy screeninstalacji - ale proszę wyjaśnić podstawy screenOP (odłącz / dołącz / etc)
Robert Riedl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.