システムが自動的に起動し、競合が発生した場合に再起動するようにsystemdに追加したいサーバーがあります。
サーバーはデーモンでなければなりませんか?
答え1
はい。サービスマネージャ(systemdなど)によって開始されたプロセスは、デーモンコンテキストで実行されます。
しかし、デーモンが実際に何を意味するのかを知っておく必要があります。バッハを引用するには:
UNIXシステムのプロセスは、ユーザープロセス、デーモンプロセス、またはカーネルプロセスです。一般的なシステムのほとんどのプロセスは、端末のユーザーに関連付けられたユーザープロセスです。 悪魔プロセスはどのユーザーにも関連付けられませんが、[...]などのシステム全体の機能を実行します。
——モリスJ.バッハ(1986)。UNIXオペレーティングシステムの設計。フレンティスホール。 ISBN 01320177571。238ページ。
これは、プログラムが分岐したかどうかには関係なく、プロセスがユーザーのログインセッションに関連付けられているかどうかに関係します。システム全体の機能を実行し、ユーザーログインセッションに関連付けられていないサービスで管理されているプログラムが必要な場合は、デーモンコンテキストで実行できます。これをsystemdサービス単位でラップし、systemdを使用して管理できます。 (または他のサービス管理ツールセットを使用して同様の操作を実行することもできます。)
(systemdの概念はユーザー固有のサービス、ユーザーログインセッション、Xサーバー、ユーザー固有のランタイムディレクトリ、ユーザー固有のデスクトップバスエージェント、およびPAMとのやや複雑な関係が、このWWWサイトの多くの問題の原因です。上記は次のとおりですシステム全体しかし、systemdのサービスを使用すると、おそらくそう思っているでしょう。 )
もちろん、最良の結果を得るには、プログラムを「デーモン化」するように分岐しないでください。 「悪魔化」という概念はユーザープロセスを作成できます悪魔プロセス。この回答の範囲外であるため、1980年代以降はそうではなく、アイデアに欠陥があります。とにかく、systemd、daemontools、nosh toolset、perp、s6、runit、およびその他のサービス管理メカニズムで実行されるすべてのエントリは完全に冗長です。このタイプのサービスマネージャによって生成されたプロセスは次のとおりです。すでにここにデーモンのコンテキスト。
答え2
いいえ、プロセスがデーモンである必要はありません。フォアグラウンドで実行されているプロセスは、「シンプル」タイプのシステムサービスとして処理できます。
これDebian Wikiフォアグラウンドで実行することが推奨され、ほとんどのサービスは「単純」タイプを使用するという言及もあります。
デーモンとして実行されるプロセスは通常、子プロセスをフォークすることによって開始されます。 systemdを使用してこれらのプロセスを処理するには、「フォーク」タイプのサービスが必要です。
「oneshot」などの他のタイプもあります。よりsystemd.service のマニュアルページ詳細については。