linux - running - ¿Cómo puedo ejecutar mi servidor web Golang en segundo plano?
nohup (3)
Cosas simples / usables primero
Si desea un script de inicio sin mucho esfuerzo, puede usar el servicio upstart
. Consulte la página del manual correspondiente y /etc/init/*.conf
para ver ejemplos. Después de crear dicho proceso, puede iniciar su servidor llamando
service myserver start
Si desea más funciones, como limitaciones específicas o administración de permisos, puede probar xinetd
.
Usando el caparazón
Puede comenzar su proceso de esta manera:
nohup ./myexecutable &
El &
le dice al shell que inicie el comando en segundo plano, manteniéndolo en la lista de trabajos. En algunos shells, el trabajo se cancela si el shell primario sale utilizando la señal HANGUP. Para evitar esto, puede ejecutar su comando utilizando el comando nohup
, que descarta la señal HANGUP.
Sin embargo, esto no funciona, si el proceso llamado vuelve a conectar la señal HANGUP.
Para estar realmente seguro, debe eliminar el proceso del contador de la shell. Para dos conchas bien conocidas esto se puede lograr de la siguiente manera:
intento:
./myexecutable &
disown <pid>
zsh:
./myexecutable &!
Matando a su trabajo de fondo
Normalmente, el shell imprime el PID del proceso, que luego se puede kill
utilizando el comando kill
, para detener el servidor. Si su shell no imprime el PID, puede obtenerlo usando
echo $!
directamente después de la ejecución. Esto imprime el PID del proceso bifurcado.
Recientemente completé el tutorial de desarrollo web Wiki ( http://golang.org/doc/articles/wiki/ ). Me divertí muchísimo y me gustaría experimentar más con el paquete net / http.
Sin embargo, noté que cuando ejecuto el wiki desde una consola, el wiki toma el control de la consola. Si cierro el terminal de la consola o detengo el proceso con CTRL + Z , el servidor se detiene.
¿Cómo puedo hacer que el servidor se ejecute en segundo plano? Creo que el término para eso se está ejecutando en un daemon.
Estoy ejecutando esto en Ubuntu 12.04. Gracias por cualquier ayuda.
Podría usar Supervisord para administrar su proceso.
Ubuntu? Use upstart
.
Cree un archivo en /etc/init
para su trabajo, llamado your-service-name.conf
start on net-device-up
exec /path/to/file --option
Puede usar start your-service-name
, así como también: stop
, restart
, status