¿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

U2ros
fuente
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
lukassos
fuente
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


fuente
7
$ servicename &

El uso &hace que el programa se ejecute en segundo plano, en lugar de bloquear el shell hasta que finalice el programa.

dixoncx
fuente
No lo hace P.ej. dixon@dixon-vaio:~$ nautilus & [1] 11835. Devuelve la identificación del proceso y aparecerá un nuevo indicador de shell. Verifique también esto: http://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and .
dixoncx
1
Estoy corregido. Voto negativo eliminado.
Scott Severance el
0

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

Nicholas Porter
fuente
&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