2016-12-17 4 views
1

要件:アプリケーションをバックグラウンドでLinux上で実行するにはどうすればよいですか?

  • 私は(もちろんの起動時に)バックグラウンドでLinux上で自分のアプリケーションを実行したいです。

  • コンソールから直接start/stop/restartコマンドを呼び出すことができます(これは/etc/init.dと同じように単純でなければなりません - コンソールから単純なコマンドを直接呼び出してください)。

  • 私はステータスを呼び出すことができます - そして、私はこのコマンドが何らかの形でそれ自身によって返されたアプリケーションの実際のステータスを取得したいと思っています。私はStringを返すか、stdinを使ってコマンドを送るメソッドを呼び出すことができると考えました。しかし、&、またはstart-stop-daemonを実行すると、stdinはデタッチされます。 stdinをアプリケーションに簡単に取り付ける方法はありますか(私はパイプを作ることができますが、これはかなり複雑です)。または、デーモンとして起動した後にアプリケーションと通信する最良の方法は何ですか(私はソケットを作ってtelnetで接続することができますが、最初にtelnetを起動しなくても、 )?理想的には、任意のコマンドを送信する可能性を得るために素晴らしいものだが、簡単なステータスは(再びしかし - それは、そのステータスsomne​​howを取得するためにアプリケーションと通信する必要がある)で十分であろう、私は多くの異なった答えを発見した

。彼らの中には単にnohupと&を使用すると言っている人もいれば、nohupと&は古いファッションだと言う人もいます。いくつかの答えは、start-stop-daemonまたはJSvc(java用)を使用するように言います。しかし、彼らの誰も私からこの3つの要件を満たすことはできないようです。

3つの要件のすべてを満たすための最も簡単な可能性は何ですか?

PS。私は画面を使いたくない。アプリケーションはLinuxデーモンとして実行する必要があります。

PPS。アプリケーションはJavaで書かれていますが、私はJavaに限定されない一般的な解決策を探しています。

+1

IMHOという名前のパイプはあなたにとって正しい方法です。 –

+0

Stack Overflowは、プログラミングと開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。また、[Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww

答えて

1

必要に応じてデーモンと通信するためのコマンドラインツールを作成する必要があります。ツール自体はTCP/IPまたは名前付きパイプを使用できます。

コンソールからcli-tool start|stop|restart|statusを使用してください。

起動シーケンス(ユーザーログイン前)でデーモンを起動する必要がある場合は、initシステム(init.d、systemd、OpenRCなど)に対処する必要があります。

ドラゴンズここに:

  1. initは、CLI経由で手動停止した後、あなたのデーモンを再起動していないことを確認してください。

  2. コマンドラインツール自体は、非特権ユーザー権限で実行されるので、再起動して最初の起動スクリプトを使用スーパーユーザーのアクセス権やアプリケーション固有のユーザーならば難しいかもしれないと、特にケース深いinit統合では、あなたがsudo cli-tool startを使用する必要があります。この一つの可能​​な解決策を回避するために

initを経由して永遠に実行されるラッパー・デーモンを作成し、適切な権限を持つ基本的なアプリケーション(スタート・ストップ)を制御することです。

短所:デーモン用の2つの追加ツールを開発します。

長所:ラッパーデーモンは、スーパーユーザー/特定のユーザーとユーザースペースの間の回路ブレーカーとして動作できます。

+0

これは私が思ったことです。今私は残っている1つの質問があります:ステータスは、現代の通常のアプリでどのように機能しますか?たとえば、私が/etc/init.d/xxxのステータスを呼び出すと、いくつかのアプリケーションでは、現在のステータスに関する本当の良い情報が表示されます。これらの情報を得るための通常の方法は何ですか? –

+0

init.dスクリプトのカスタムステータスセクションを経由します。 init.d/xxxソースの 'status'を見てください)。アプリケーションによって異なりますが、通常の方法では、追加のステータス情報を表示するためのコマンドラインツールをいくつか呼び出す方法があります。 – Nikolay

+0

大丈夫、ありがとう、私はあなたの努力のためのいくつかのポイントを与えるためにあなたの答えを受け入れる:) –

関連する問題