¿Cómo ejecutar un programa como servicio (silencioso)?


23

Tengo un servidor basado en Python que empiezo desde la terminal. Esta instancia particular del terminal le da el control al programa, y ​​el programa lo usa como una especie de ventana de registro, hasta que se cierra. ¿Es esto normal, o debería intentar iniciar el programa de alguna otra manera en la que simplemente se mostrará como un proceso activo? Si cierro el terminal desde el que comencé el programa, el programa muere con él.

Gracias


PHP se menciona en esta respuesta, pero también se aplica a Python: askubuntu.com/questions/26555/running-php-cli-server/…

Respuestas:


9

Incluso el viejo bash está usando & para enviar procesos a segundo plano, pero también hay algunas otras formas ... pero las dos básicas son estas:

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

Algunos otros comandos útiles:

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

Hmmm, estaba usando el comando 'top' para ver los procesos hasta ahora
U2ros

Gran solución ¿Hay alguna forma de modificar la 1. opción para que pid se guarde en un archivo. Entonces se genera un archivo de registro y un archivo pid.
Oguz Bilgic

27

Conviértalo en un demonio (servicio)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

Desde la terminal también puede ejecutar screeno hacer un seguimiento con su comando &. Manera fácil de ejecutar procesos continuos.


&En mi opinión, solo usar como fondo el proceso en este caso es muy poco. OP afirma que su servidor se registra en stdout, por lo que &su terminal estará abarrotada de resultados. Además, dado que OP menciona el cierre del terminal , OP no podrá volver a poner en primer plano el proceso y se perderá toda la salida del registro. Mejor, al menos, redirigirlo a un archivo de registro o seguir con la screenconfiguración, pero luego explique los conceptos básicos de screenOP (separar / adjuntar / etc.)
Robert Riedl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.