Hoe zorg ik ervoor dat mijn Golang-webserver op de achtergrond draait?

Ik heb onlangs de Wiki-zelfstudie over webontwikkeling(http:// golang.org/doc/articles/wiki/). Ik heb heel veel plezier gehad en ik zou graag meer willen experimenteren met het net/http-pakket.

Ik merkte echter dat wanneer ik de wiki vanaf een console uitvoer, de wiki de console overneemt. Als ik de consoleterminal sluit of het proces stop met CTRL+Z, stopt de server.

Hoe kan ik de server op de achtergrond laten draaien? Ik denk dat de term daarvoor in een daemon draait.

Ik voer dit uit op Ubuntu 12.04. Bedankt voor alle hulp.


Antwoord 1, autoriteit 100%

Eenvoudige / bruikbare dingen eerst

Als u zonder veel moeite een startscript wilt, kunt u de service upstartgebruiken. Zie de bijbehorende handleiding en /etc/init/*.confvoor voorbeelden. Na het maken van een dergelijk proces
u kunt uw server starten door te bellen

service myserver start

Als je meer functies wilt, zoals specifieke beperkingen of toestemmingsbeheer, kun je xinetdproberen.

De shell gebruiken

U zou uw proces als volgt kunnen starten:

nohup ./myexecutable &

De &vertelt de shell om het commando op de achtergrond te starten en het in de takenlijst te houden.
Op sommige shells wordt de taak afgebroken als de bovenliggende shell wordt afgesloten met het HANGUP-signaal.
Om dit te voorkomen, kunt u uw opdracht starten met het nohup-commando, dat het HANGUP-signaal negeert.

Dit werkt echter niet als het opgeroepen proces het HANGUP-signaal opnieuw verbindt.

Om echt zeker te zijn, moet je het proces uit de takenlijst van de shell verwijderen.
Voor twee bekende shells kan dit als volgt worden bereikt:

bash:

./myexecutable &
disown <pid>

zsh:

./myexecutable &!

Je achtergrondbaan vermoorden

Normaal gesproken drukt de shell de PID van het proces af, die vervolgens kan worden afgebroken met het commando kill, om de server te stoppen. Als uw shell de PID niet afdrukt, kunt u deze verkrijgen met

echo $!

direct na uitvoering. Dit drukt de PID van het gevorkte proces af.


Antwoord 2, autoriteit 14%

U kunt Supervisordgebruiken om uw proces te beheren.


Antwoord 3, autoriteit 9%

Ubuntu? Gebruik upstart.

Maak een bestand in /etc/initvoor uw taak, genaamd your-service-name.conf

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

U kunt start your-service-namegebruiken, evenals: stop, restart, status


Antwoord 4, autoriteit 5%

Hiermee wordt uw service geconfigureerd met behulp van systemd, geen uitgebreide tutorial, maar eerder een snelle start van hoe dit kan worden ingesteld.

Inhoud van uw app.service-bestand

[Unit]  
Description=deploy-webhook service
After=network.target
[Service]      
ExecStart=/usr/bin/go webhook.go    
WorkingDirectory=/etc/deploy-webhook
User=app-svc      
Group=app-svc
Restart=always    
RestartSec=10    
KillSignal=SIGINT
SyslogIdentifier=deploy-webhook-service      
PrivateTmp=true  
Environment=APP_PARAM_1=ParamA
Environment=APP_PARAM_2=ParamB
[Install]      
WantedBy=multi-user.target  

De service starten

sudo systemctl start deploy-webhook.service

Servicestatus

sudo systemctl status deploy-webhook.service

logs

journalctl -u deploy-webhook -e

Other episodes