Come eseguire un programma come servizio (silenzioso)?


23

Ho un server basato su Python che inizio dal terminale. Questa particolare istanza del terminale fornisce quindi il controllo al programma e il programma lo utilizza come una sorta di finestra di registrazione, fino alla sua chiusura. È normale, o dovrei in qualche modo provare ad avviare il programma in un altro modo in cui mostrerà semplicemente come un processo attivo? Se chiudo il terminale da cui ho avviato il programma, il programma muore con esso.

Grazie


PHP è menzionato in questa risposta ma si applica anche a Python: askubuntu.com/questions/26555/running-php-cli-server/…

Risposte:


9

Anche il vecchio bash sta usando & per inviare processi in background, ma ci sono anche altri modi ... ma due fondamentali sono questi:

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

Alcuni altri comandi utili:

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

Hmmm, stavo usando il comando 'top' per visualizzare i processi fino ad ora
U2ros,

Ottima soluzione C'è un modo per modificare l'opzione 1. in modo che pid venga salvato in un file. Quindi vengono generati un file di registro e un file pid.
Oguz Bilgic,

27

Trasformalo in un demone (servizio)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

Dal terminale è anche possibile eseguire screeno seguire il comando con &. Modo semplice per eseguire processi continui.


solo usando &per fare da sfondo al processo in questo caso è troppo poco, secondo me. OP afferma che il suo server accede a stdout, quindi il &suo terminale sarà ingombro di output. Inoltre, poiché l'OP menziona la chiusura del terminale , l'OP non sarà in grado di riavviare nuovamente il processo e tutto l'output del registro andrà perso. Meglio, almeno, reindirizzarlo a un file di registro o attenersi screenall'installazione - ma poi spiegare le basi di screenOP (scollegare / allegare / ecc.)
Robert Riedl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.