Linuxオペレーティングシステムはマルチタスクオペレーティングシステムとして特徴付けられているため、デーモンは、定義上、バックグラウンドプロセスとして継続的に実行されるプログラムです。つまり、このプロセスの実行は、アクティブなユーザーのシステムの相互作用に依存しません。通常のシステムユーザーは、デーモンプロセスの定期的な実行を制御できません。
ほとんどのデーモンプロセスを定義する命名規則は、1文字の「サフィックス」dです。 この命名規則により、通常のシステムプロセスとデーモンを利用したプロセスを区別することができます。例: sshd 着信の管理を担当するデーモンプロセスです SSH 接続。別のデーモンプロセスの例は syslogd 。 Linuxシステムのロギング機能を担当します。
Linux環境では、デーモンの起動は起動時に行われます。 Linuxシステムは完全なUnixクローンであるため、initプロセスはデーモンの親プロセスとしての資格があります。 Linuxオペレーティングシステムでデーモンを起動および停止するには、最初ににアクセスする必要があります。 /etc/init.d OSのscriptsディレクトリ。
一般的なデーモン機能
- 各リクエストを互換性のあるネットワークポートに関連付けることで、システムがネットワークリクエストに正しく応答できるようにします。デーモンによって処理される一般的なネットワークポートはポート80です。
- デーモンを使用すると、スケジュールされたシステムタスクを実行または実行できます。この特定のタスクを担当するデーモンは、 cronと呼ばれます。 。 cronジョブを作成します スケジュールされたタスクの定期的な実行を処理します。
- デーモンは、システムのパフォーマンスの監視にも貴重な貢献をします。たとえば、RAIDアレイやハードディスクの状態を確認できます。
便利なLinuxサービスデーモン
- amd :自動マウントデーモン
- anacron: 遅延したcronタスクの起動時の実行
- apmd: Advanced Power Management Daemon
- atd: キューに入れられたジョブを実行するためにツール機能で使用します
- autofs: オートマウンターデーモンと連携して動作し、オンデマンドシステムデバイスのマウントとアンマウントを容易にします
- crond: タスクのスケジューリングを処理するデーモン
- cupsd: CUPS印刷を処理するデーモン
- DHCP: インターネットブートストラッププロトコルサーバーと動的ホスト構成プロトコルの両方のデーモン。
- ゲート: 複数のルーティングプロトコルを担当するルーティングデーモン。ルーティングされたegpupの代わりになります
- httpd: ApacheなどのWebサーバーを処理するデーモン
- inetd: インターネットスーパーサーバーに関連付けられたデーモン
- imapd :IMAPサーバーのデーモン
- lpd: Line Printer Daemon
- memcached: インメモリ分散されたオブジェクトキャッシングデーモン
- マウント: デーモンのマウント
- MySQL: MySQLデータベースサーバーのデーモン
- 名前: DNSサーバーのデーモン
- nfsd: ネットワークファイル共有デーモン
- nfslock: nfsdはファイルロックサービスに関連付けられているため、このデーモンはこれらのサービスを開始および停止できます。
- nmbd: ネットワークメッセージブロックのデーモン
- ntpd: ネットワークタイムプロトコルサービスのデーモン
- 後置: メール転送エージェントとして機能するデーモン。 sendmailの代わりになります。
- Postgresql: Postgresデータベースサーバーのデーモン
- ルーティング: ルーティングテーブルを管理するためのデーモン
- rpcbind: リモートプロシージャコールバインドに関連付けられたデーモン
- sendmail: メール転送エージェントとして機能するデーモン
- smbd: SambaSMBサーバー用のデーモン
- smtpd: Simple MailTransferProtocolのデーモン
- snmpd: Simple NetworkManagementProtocolのデーモン
- イカ: Webページキャッシュ用のプロキシサーバーに関連付けられたデーモン
- sshd: SecureShellServerに関連付けられたデーモン
- 同期: システムメモリをシステムファイルと同期するためのデーモン
- Syslog: システムロギングを実行するデーモン
- tcpd: このデーモンサービスラッパーは、inetdベースのデーモンサービスに関連するアクセス制限プロトコルを実行します。 hosts.allowを介してこれらの制限を実装します およびhosts.deny 。
- Telnetd: telnetサーバーのデーモン
- vsftpd: 非常に安全なファイル転送プロトコル用のデーモン
- webmin: Webベースの管理サーバー用のデーモン
- xinetd: 拡張インターネットスーパーバイザーに関連付けられたデーモン
- xntd :ネットワークタイムサーバーのデーモン
Linuxオペレーティングシステムの世界の初心者、中級者、または専門家のユーザーであるかどうかにかかわらず、このOS環境内でスキルと専門知識を向上させるときに、上記のデーモンのいずれかに慣れることができます。
デーモンの開始/停止/再起動:ターミナルベースのアプローチ
記憶して探索するのに役立つLinuxデーモンのリストができたので、最初に知っておく必要があるのは、これらのデーモンを開始、停止、または再起動する方法です。 Linuxターミナルを起動したら、次の構文規則を考慮して、Linuxオペレーティングシステムでデーモンを開始、停止、および再起動します。
service preferred-daemon-name start service preferred-daemon-name stop service preferred-daemon-name restart
Preferred-daemon-nameを置き換えます 選択したLinuxシステムデーモン名の構文引数。 Linuxシステムでアクティブであるか、すでに定義されている限り、上記で強調表示されているデーモンリストから1つを選択できます。たとえば、a を開始、停止、再起動することで、上記の構文の実際の使用法を実装できます。 デーモン。 /etc/init.dに移動します Linuxシステムで使用可能なデーモンのリストについては、ターミナルのディレクトリ。
Linuxシステムのデーモンの一覧表示
/etc/init.dに移動する代わりに、Linuxシステムで使用可能なデーモンを確認するためのより効果的な方法 ディレクトリは、1つのコマンドで、そのディレクトリから定義されたすべてのアクティブデーモンと非アクティブデーモンを一覧表示します。次のコマンドは、この目的を達成するのに効果的です。
$ service –status-all
リストされたデーモン名の前にある中括弧で囲まれた正の[+]および負の[-]記号は、それぞれアクティブまたは非アクティブであることを意味します。
ユーザー定義デーモンの操作
ユーザー定義デーモンを正常に作成および実装するには、特定のルールまたはプロトコルに従う必要があります。これらのプロトコルは、Linux環境でのデーモンの実行を完全に理解するのに役立ちます。デーモンは、システムコールを介してカーネルモジュールとインターフェイスするのに十分な柔軟性も備えています。このデーモン機能ストレッチは、PDA(Personal Digital Assistants)、プリンター、実行可能な外部コントローラーボードなどのハードウェアデバイスとの相互作用をサポートします。デーモンの構成要素は、Linuxオペレーティングシステムの特徴的なパワーと柔軟性にも貢献しています。
Pythonを使用した関連性のあるデーモンの実装は、Sander Marechalによって注意深く示され、文書化されています。このデーモンを作成する際は、実行順序に従うことに注意してください。まず、デーモンを正常に開発するには、LinuxシステムにPythonパッケージをインストールする必要があります。 Pythonをインストールするには、次のコマンドを使用できます。
$ sudo apt install python3-pip python3-dev
Sander Marechalの作成されたPythonデーモンコードへのリンクは、洗練されたPython3コードバージョンも提供します。デーモンがどのように機能するかをよりよく理解するためにそれを実装することを検討した場合に役立ちます。
Pythonがインストールされているかどうかわからない場合は、Linuxターミナルで次のコマンドを実行してください。
$ python3 --version
デーモンの目的
単一のデーモンが特定のタスクの処理専用であるため、完全に実行する必要があります。問題のタスクは、レポートを作成してsendmailを介して管理者に送信するのと同じくらい単純な場合もあれば、複数のメールボックスにリンクされた複数のドメインを管理するのと同じくらい複雑な場合もあります。ある時点で、作成するデーモンは他の既存のデーモンと通信する必要があります。
ユーザーとデーモンの相互作用
システムユーザーと作成されたデーモンが直接通信することはお勧めしません。デーモンが必要な場合は、システムユーザーと通信するために作成します。この通信は、GUIインターフェースのようなものを介して促進することができます。この通信プラットフォームは、GTK+GUIの複雑さまたは信号セットの複雑さのいずれかを持つことができます。
デーモンの作成
多数のアプローチがデーモンの作成をサポートしています。たとえば、コマンドラインインターフェイスを使用して、次のようにPythonスクリプトをデーモン化できます。
$ python my_python_script.py &
Sander Marechalが作成したPython3デーモンコードをPythonファイルに保存し、上記のコマンドでデーモン化することができます。上記のターミナルコマンドを使用するとデーモンを簡単に作成できますが、予測できないターミナル出力などの課題に対処する必要があります。これらの課題は、Pythonデーモンコードをどれだけうまくリファクタリングしたかによって異なります。また、上記のアプローチは、特定のデーモンへのPIDロックファイルの割り当てをサポートしていません。ほとんどのデーモンは瞬時に実行されるため、デーモンを制御することは不可能です。一方、単純なデーモンのみが必要な場合は、上記のアプローチで目的のデーモン結果が得られます。
デーモンの基本構造
デーモンが目的の機能を実行または実行する前に、デーモンはその実行につながるいくつかの先入観のあるルールを考慮する必要があります。これらのルールは、実際のタスクにつながる低レベルの家事と考えることができます。これらのルールは、次の手順に分けることができます。
- 親プロセスからのフォークの作成が最初に行われます
- umask(ファイルモードマスク)の変更が続きます
- ログは書き込み用に開かれます
- 一意のSID(セッションID)が作成されます
- ファイルの整合性を維持するために、実行は現在の作業ディレクトリからセカンダリの場所に切り替わります
- 標準のファイル記述子は閉じられます
- ターゲットデーモンコードの実行
デーモンの実装例の詳細については、GitHubをご覧ください。