Cプログラムをデーモンとして実行するには?

Cプログラムをデーモンとして実行するには?

デーモンとして実行したいCプログラムがあります。私はUbuntu 14.04LTSで働いています。どのようなアプローチが正しいですか?誰でも助けることができますか?

答え1

今Ubuntuに答えがあります。

正しい方法は、Ubuntu 14に付属のデーモンマネージャの下にあります。ここで他の人がデーモンとして機能し、ライブラリ関数を呼び出すプログラムを明示的に設計することについて話したのは、daemon()単に間違っています。皮肉なことに、Ubuntuは3つのLTSバージョンをリリースしました。以前バージョン14 LTS - 実際には2006年のUbuntu 6.10から始まります。それ以来、さまざまな種類のデーモンマネージャが生まれました。

適切なサービス管理を持つ人の正解は次のとおりです。欲しくないdaemon()あなたに電話欲しくない「デーモンになる」ために特別な措置を講じてください。一部の人々にとって、これは1990年代初頭から正解でした。 2006年にもパーティーは少し遅れたようだった。 ☺それにもかかわらず、過去10年間Ubuntuにはこれが正解でした。

あなたがすることは簡単です。 upstartにプログラムの呼び出し時期と方法を知らせるupstart "作業"ファイルを設定します。新生がそれを呼ぶもう悪魔化してる、制御端末がなく、予測可能で変化しない初期プロセス状態を持ちます。あなたのプログラム特別なことはありません。簡単に実行して、ログとエラーメッセージを通常の方法で標準エラーに書き込みます。 Upstartが標準エラーへの書き込みを処理する方法を作業ファイルで並べ替えることができます。

これヌボリッチレシピ開始イベントとログ処理を制御する個々のセクションを含む、これらのすべての内容について詳しく説明します。こことAskUbuntuにはこのトピックに関する多くのコンテンツがあります。

後でUbuntu 16 LTSにアップグレードすると、世界は劇的に変わります。しかしそれでもコードで特別なことをしないで、デーモンマネージャで実行してください。それでも正解になります。

追加読書

答え2

端末でプログラムを実行できない場合は、次のようないくつかの方法で問題を解決できます。プログラムはユーザー入力を要求しないでください。

  • 使用nohupnohup program > program.log 2>program.err &。その後、端末を終了できます。

  • atdサービスを利用するには:echo "program > program.log 2>program.err" | at now
    または echo "program > program.log 2>program.err" | batch

  • 起動スクリプトとして機能します。

プログラムにユーザー入力が必要な場合、端末の外部で実行することはできません。screenまたは、tuxセッションを使用して端末から切り離すことをお勧めします。

関連情報