web-dev-qa-db-fra.com

Comment faire fonctionner mon serveur Web Golang en arrière-plan?

J'ai récemment terminé le tutoriel de développement Web Wiki ( http://golang.org/doc/articles/wiki/ ) . Je me suis beaucoup amusé et j'aimerais expérimenter davantage avec le package net/http.

Cependant, j'ai remarqué que lorsque j'exécute le wiki à partir d'une console, le wiki prend le relais de la console. Si je ferme le terminal de la console ou arrête le processus avec CTRL+Z puis le serveur s'arrête.

Comment faire fonctionner le serveur en arrière-plan? Je pense que le terme pour cela s'exécute dans un démon.

J'exécute cela sur Ubuntu 12.04. Merci pour toute aide.

41
quakkels

Choses simples/utilisables d'abord

Si vous voulez un script de démarrage sans trop d'effort, vous pouvez utiliser le service upstart. Voir la page de manuel correspondante et /etc/init/*.conf pour des exemples. Après avoir créé un tel processus, vous pouvez démarrer votre serveur en appelant

service myserver start

Si vous souhaitez plus de fonctionnalités, comme des limitations spécifiques ou la gestion des autorisations, vous pouvez essayer xinetd.

Utilisation du shell

Vous pouvez démarrer votre processus comme ceci:

Nohup ./myexecutable &

Le & indique au shell de démarrer la commande en arrière-plan, en la conservant dans la liste des travaux. Sur certains shells, le travail est interrompu si le shell parent se ferme en utilisant le signal HANGUP. Pour éviter cela, vous pouvez lancer votre commande à l'aide de la commande Nohup, qui supprime le signal HANGUP.

Cependant, cela ne fonctionne pas si le processus appelé reconnecte le signal HANGUP.

Pour être vraiment sûr, vous devez supprimer le processus de la liste de diffusion de Shell. Pour deux obus bien connus, ceci peut être réalisé comme suit:

frapper:

./myexecutable &
disown <pid>

zsh:

./myexecutable &!

Tuer votre travail d'arrière-plan

Normalement, le shell imprime le PID du processus, qui peut ensuite être tué à l'aide de la commande kill, pour arrêter le serveur. Si votre Shell n'imprime pas le PID, vous pouvez l'obtenir en utilisant

echo $!

directement après l'exécution. Ceci imprime le PID du processus bifurqué.

57
nemo

Vous pouvez utiliser Supervisord pour gérer votre processus.

9
3on

Ubuntu? Utilisez upstart .

Créez un fichier dans /etc/init pour votre travail, nommé your-service-name.conf

start on net-device-up
exec /path/to/file --option

Vous pouvez utiliser start your-service-name, ainsi que: stop, restart, status

6
lunixbochs