web-dev-qa-db-ja.com

Golang Webサーバーをバックグラウンドで実行するにはどうすればよいですか?

最近、Wiki Web開発チュートリアルを完了しました(- http://golang.org/doc/articles/wiki/ ) 。たくさんの楽しみがありましたので、net/httpパッケージでもっと実験したいと思います。

しかし、コンソールからウィキを実行すると、ウィキがコンソールを引き継ぐことに気付きました。コンソール端末を閉じるか、プロセスを停止すると CTRL+Z その後、サーバーが停止します。

サーバーをバックグラウンドで実行するにはどうすればよいですか?その用語はデーモンで実行されていると思います。

これをUbuntu 12.04で実行しています。助けてくれてありがとう。

41
quakkels

シンプルで使いやすいものから

労力をかけずに起動スクリプトが必要な場合は、upstartサービスを使用できます。対応するマニュアルページと/etc/init/*.conf たとえば。そのようなプロセスを作成した後、次を呼び出してサーバーを起動できます。

service myserver start

特定の制限や権限管理など、より多くの機能が必要な場合は、xinetdを試してください。

シェルを使用する

次のようにプロセスを開始できます。

Nohup ./myexecutable &

&は、シェルにコマンドをバックグラウンドで開始し、ジョブリストに保持するよう指示します。一部のシェルでは、親シェルがHANGUPシグナルを使用して終了すると、ジョブが強制終了されます。これを防ぐには、Nohupコマンドを使用してコマンドを起動し、HANGUPシグナルを破棄します。

ただし、呼び出されたプロセスがHANGUPシグナルを再接続する場合、これは機能しません。

確かに、シェルのジョブリストからプロセスを削除する必要があります。 2つのよく知られたシェルの場合、これは次のように実現できます。

バッシュ:

./myexecutable &
disown <pid>

zsh:

./myexecutable &!

バックグラウンドジョブを強制終了する

通常、シェルはプロセスのPIDを出力し、killコマンドを使用して強制終了してサーバーを停止できます。シェルがPIDを印刷しない場合は、次を使用して取得できます。

echo $!

実行直後。これにより、分岐したプロセスのPIDが出力されます。

57
nemo

Supervisord を使用してプロセスを管理できます。

9
3on

Ubuntu? upstart を使用します。

/etc/initという名前の、ジョブのyour-service-name.confにファイルを作成します

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

start your-service-name、およびstoprestartstatusを使用できます。

6
lunixbochs