49

最近、Wiki Web 開発チュートリアル( http://golang.org/doc/articles/wiki/ ) を完了しました。とても楽しかったので、net/http パッケージをもっと試してみたいと思います。

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

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

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

4

5 に答える 5

65

シンプル・使えるもの第一

手間をかけずに開始スクリプトが必要な場合は、この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 が出力されます。

于 2012-09-19T00:03:33.670 に答える
9

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

于 2012-09-18T23:52:44.013 に答える
6

Ubuntu? を使用しupstartます。

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

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

start your-service-nameおよび次のものstopを使用できます。restartstatus

于 2012-09-19T00:17:07.127 に答える