Skip to content
Latchkey

daemonとは何か?バックグラウンドのサービスprocess

daemonは、どのterminalからも切り離されてバックグラウンドで実行され、データベース、webサーバー、スケジューラといったサービスを提供するprocessです。

buildが依存する多くのサービス、データベース、Docker engine、jobスケジューラは、daemonとして実行されます。起動して静かに仕事を待つバックグラウンドprocessです。CIでは、テストが並行して実行されるサービスを必要とするときにdaemonが現れ、その仕組みを知ることできれいに起動・停止するのに役立ちます。

daemonを構成するもの

daemonは制御terminalから切り離され、バックグラウンドで実行され、多くの場合はboot時に起動します。通常はterminalではなくlogファイルに書き込み、リクエストやイベントを待ちます。

daemonの例

  • PostgreSQLやMySQLのようなデータベースサーバー。
  • containerを実行するDocker engine。
  • スケジュールされたjobを発火するcron。
  • リモート接続を受け付けるsshd。

daemonとフォアグラウンドprocess

フォアグラウンドprocessはterminalを保持し、あなたはそれを待ちます。daemonはバックグラウンドで独立して実行されるため、リクエストに応答している間も他のコマンドを実行できます。慣例として、daemonの名前はsshdやdockerdのようにdで終わることが多いです。

daemonの起動と停止

daemonは通常、サービスマネージャによって、またはバックグラウンドで起動することで開始され、その後signalを送ることで停止されます。スクリプトはdaemonを使う前に準備完了を待たなければならず、そうでなければリクエストが失敗します。

CIにおけるdaemon

テストがデータベースや他のサービスを必要とするとき、CIはしばしばそれをjobの期間中daemon(またはservice container)として実行します。よくある落とし穴は、daemonが準備完了する前にそれと通信することであり、そのためスクリプトはまずhealth checkをpollingします。

マネージドrunnerでのサービス

Latchkeyのrunnerは、jobの隣でservice containerをdaemonとして実行し、jobが終わると破棄できます。テストが実行される前にreadiness checkを待つことで、まだ起動していないサービスによる不安定な失敗を避けられます。

重要なポイント

  • daemonは、terminalから切り離されてサービスを提供するバックグラウンドprocessです。
  • データベース、Docker engine、cronはすべてdaemonとして実行されます。
  • CIではサービスがdaemonとして実行されます。使う前に準備完了を待ちましょう。

関連ガイド