私のコンパイルされたプログラムはinit.dを介して実行されていますが、最終的に終了します。

私のコンパイルされたプログラムはinit.dを介して実行されていますが、最終的に終了します。

C私は電源イベントを監視しudev、ノートパソコンのバックライトの明るさを自動的に調整する小さなユーティリティを作成しました。 (私はUbuntu 15.04を使用しています)

次のコマンドを実行しましたが、起動時に正常に実行されました。

$ sudo cp powermonitor /etc/init.d/powermonitor
$ sudo chmod +x /etc/init.d/powermonitor
$ sudo update-rc.d powermonitor defaults

しかし、CPU使用量をhtopしばらく監視した結果、今は消えたことがわかりました。このプログラムはコマンドライン引数を受け入れませんが、Linuxは次のようにプログラムを実行しようとしているようです。

/etc/init.d/powermonitor start

プロセスを実行し続けるにはどうすればよいですか?

編集:明確にするためにpowermonitorスクリプトではなく実行可能ファイルです。

答え1

のファイルは/etc/init.d実行可能ファイルにコンパイルしてはいけません。コンパイルされた実行可能ファイルを別の場所に置き、次のものを作成することも/usr/local/binできます。初期化スクリプトでは、/etc/init.dコンパイルされたプログラムを起動および停止する方法を知っています。通常、これは起動するためにバックグラウンドで実行し、PID(または使用されている実行可能ファイル名killall)を終了して停止するのと同じくらい簡単です。 initスクリプトは、、&cinitという単語という単一の引数を使用して呼び出されます。サービス自体を実行する方法を知ることはスクリプトの責任です。startstoprestart

簡単な紹介が必要な場合は、以下を試してください。ここ/etc/init.d状況に応じて変更できるサンプルスケルトンスクリプトがディレクトリにある可能性があります。

ところで、どのディストリビューションを実行していますか?現在、多くの最新のディストリビューションは、デフォルトでIMOユニットファイルの代わりに宣言的なユニットファイルを使用して実行されますsystemdsysvinitsystemd は sysvinit 互換モードを提供するので、直接実行できます。その場合は、スクリプトではなくユニットファイルを作成することをお勧めします。

関連情報