Ubuntu前書きLinuxサービスの自動起動に関するチュートリアルのこの第2部では、一歩下がってinitプロセスについて詳しく説明します。デーモンの起動動作を制御する方法を十分に理解する必要があります。前編では、クラッシュまたはリブート後にLinuxサービスを自動起動できるようにする方法について、MySQLを使用したいくつかの実用的な例を共有しました。Systemv、Upstart、systemdの3つの異なるinitモードからこれを行う方法を見ました。最初のチュートリアル。このチュートリアルでは、コマンドを実行し、実行した構成ファイルを編集した理由を説明します。initデーモンから始めます。時間の経過とともに新しいinitモードに置き換えられた理由も確認します。Dropletsが必要です。7サーバーこのシリーズのパート1に戻って、最初にドロップレットを作成することをお勧めします。rootユーザーになるか、サーバーでsudo特権を持っている必要があります。[このsudoに関するDigitalOceanチュートリアル]を参照してください。本チュートリアルのコマンド、クエリ、設定を本番Linuxサーバーで実行しないでください。ランレベル_runlevel_は、Linuxシステムの現在の状態を表します。initから生まれました。Linuxシステムが起動し、カーネルを初期化してから、ランレベルを1つだけ入力します。ランレベルは、Linuxサーバーのシャットダウン状態、シングルユーザーモード、再起動モードなどになります。各モードは、その状態で実行できるサービスを決定します。一部のサービスは1つ以上のランレベルで実行できますが、他のサービスでは実行できません。ランレベルは1桁で示され、0〜6の値をとることができます。次のリストは、これらの各レベルの意味を示しています。*ランレベル0:*システムのシャットダウン*ランレベル1:*シングルユーザー、レスキューモード*ランレベル2、3、4:*ネットワークが有効なマルチユーザー、テキストモード*ランレベル5:*マルチユーザー、ネットワーク対応、グラフィカルモード*ランレベル6:*システムの再起動ランレベル2、3、および4は、ディストリビューションによって異なります。一部のLinuxディストリビューションはランレベル4を実装していませんが、他のディストリビューションは実装しています。一部のディストリビューションでは、これら3つのレベルが明確に区別されています。一般に、ランレベル2、3、または4は、Linuxがマルチユーザー、ネットワーク対応、テキストモードで起動した状態を意味します。サービスの自動開始を有効にすると、実際にはランレベルに追加されます。Vでは、OSは特定のランレベルで起動します。起動すると、そのランレベルに関連付けられているすべてのサービスを開始しようとします。ランレベルはsystemdで_targets_になります。これについてはsystemdセクションで説明します。*は、マシンが起動してカーネルがメモリにロードされた後、Linuxシステムで開始する最初のプロセスです。ユーザープロセスまたはシステムサービスのロード方法、順序、および自動的に開始するかどうかを決定します。*には1のPIDがあります。これは、システムがオンラインになったときに生成される他のすべてのプロセスの親です。初期化の歴史Linuxが進化するにつれて、initデーモンの動作も進化しました。initで始まりました。initデーモン(Fedoraで最初に実装)を実装しています。Vから徐々に移行するか、段階的に廃止し、下位互換性のためだけに維持しています。Vの異なる実装を使用します。古いバージョンのDebianもSysVinitを使用しています。initデーモンの各バージョンには、サービスを管理するさまざまな方法があります。これらの変更の背後にある理由は、サービスだけでなく、デバイス、ポート、およびその他のリソースを処理する堅牢なサービス管理ツールの必要性でした。リソースを並行してロードし、クラッシュから正常に回復します。+`ファイルを使用します。Upstartのような後のinitメソッドは、後方互換性のために保持しています。Vの起動シーケンスを実行してみましょう。+`ですこのファイルのエントリの1つは、マシンを起動するランレベルを決定します。ランレベルの値が3に指定されている場合、Linuxはネットワークが有効なマルチユーザーテキストモードで起動します。scripts_を読み取りますそのため、initデーモンは、指定されたランレベルで実行する必要があるinitスクリプトを見つけると、基本的に、起動する必要があるサービスを見つけます。これらの初期化スクリプトは、最初のチュートリアルでMySQLに対して行ったように、個々のサービスの起動時の動作を構成できる場所です。次に、initスクリプトを詳細に見てみましょう。VでMySQLサーバーなどの特定のサービスを制御するものです。サービスの初期化スクリプトは、アプリケーションのベンダーから提供されるか、Linuxディストリビューションに付属しています(ネイティブサービス用)。カスタム作成サービス用に独自の初期化スクリプトを作成することもできます。Serverなどのプロセスまたはサービスが開始されると、そのバイナリプログラムファイルがメモリにロードされる必要があります。サービスの構成方法によっては、このプログラムはバックグラウンドで継続的に実行し続ける必要があります(そしてクライアント接続を受け入れます)。このバイナリアプリケーションを開始、停止、または再読み込みするジョブは、サービスのinitスクリプトによって処理されます。サービスを「初期化」するため、initスクリプトと呼ばれます。Vでは、initスクリプトはシェルスクリプトです。初期化スクリプトは、rc(コマンドの実行)スクリプトとも呼ばれます。+`ディレクトリはinitスクリプトの親ディレクトリです。+`ディレクトリにシンボリックリンクされています。+`ディレクトリがあります。数字は異なるランレベルを表します。`で始まり、2桁の数字が続くファイルがあります。これらは、実際のinitシェルスクリプトを指すシンボリックリンクファイルです。停止)および「S」は開始を表します。2桁は、スクリプトの実行順序を表します。したがって、K25some_scriptという名前のファイルがある場合、K99another_scriptの前に実行されます。起動スタートアップシーケンスに戻りましょう。+`スクリプトによって呼び出されます。`ファイルはinitデーモンにシステムがデフォルトで入力するランレベルを伝えます。`スクリプトを呼び出し、そのランレベルをパラメーターとして渡します。`ディレクトリの下のファイルを呼び出します。`の下のスクリプトが呼び出されます。+`の下のスクリプトが実行されます。+`ディレクトリ内では、最初にすべてのKスクリプトが「stop」の引数で数値順に実行され、次にすべてのSスクリプトが「start」の引数で同様の方法で実行されます。initシェルスクリプトは、それぞれstopパラメーターとstartパラメーターで呼び出されます。+`ファイル)の下のファイルはシンボリックリンクのみであるため、それらを呼び出すことは、停止パラメーターと開始パラメーターで実際のinitシェルスクリプトを呼び出すことを意味します。要約すると、Linuxサーバーがランレベルに入ると、特定のスクリプトが実行されて一部のサービスが停止し、他のスクリプトが実行されて他のサービスが開始されます。Vの自動起動ブート時にサービスを自動開始できるようにするため、実際にはinitの動作を変更しています。+`ディレクトリに適切なリンクを作成します。紛らわしい場合は、心配しないでください。その意味がわかります。システムVの例MySQLサービスの例に戻りますが、今回はより多くの理論を使用します。6ドロップレットに戻ります。SSHコマンドを使用してサーバーに接続します(WindowsユーザーはPuTTyなどのツールを使用して接続できます)。+`ファイルの内容を確認します。initdefault出力は次のようになります。Outputidフィールドの後の2は、システムがランレベル2で開始するように構成されていることを示しています。これがデフォルトのランレベルです。この場合、Debianは2をマルチユーザー、テキストモードとして指定します。+`ディレクトリを一覧表示します。次の6つが表示されるはずです。+`ディレクトリの下のスクリプトはシステムの起動時に実行されます。このディレクトリの内容をリストします。/etc/rc2.dこれは、ファイルがシンボリックリンクにすぎず、それぞれが/etc/init.dの下のスクリプトファイルを指していることを示しています。.ここにはKスクリプトはなく、S(開始)スクリプトのみが表示されています。ssh_などの既知のサービスを開始します。Sの後の2桁が起動順序を決定することに注意してください。rsyslogはcronデーモンの前に起動します。MySQLがここにリストされていることもわかります。+`ディレクトリの下にシェルスクリプトが作成されることがわかりました。MySQLのシェルスクリプトを確認します。less出力から、大きなbashスクリプトであることがわかります。Vでサービスを有効または無効にできます。インストールされているサービスとそれらのランレベルをリストすることもできます。`は、ランレベルからのみサービスをインストールまたは削除します)。+`というカスタムツールをインストールできます。+`をインストールします。-yツールをインストールしたら、次のコマンドを実行するだけで、さまざまなサービスのランレベルの動作を確認できます。sysv-rc-conf出力は、以下に示すようなかなりグラフィカルなウィンドウになります。ここから、どのランレベルでどのサービスが有効になっているかを明確に確認できます(Xでマーク)。+`を使用して、1つ以上のランレベルのサービスを有効または無効にできます。+」を押して画面を閉じます。ステップ7-起動時のMySQL起動動作のテスト前のセクションのスクリーンショットと、チュートリアルのパート1のテストからわかるように、MySQLは現在、ランレベル2〜5で有効になっています。以下のコマンドを実行して、MySQLサービスを*無効*にします。6).次のコマンドを実行します。+`に変更されたことを示しているはずです。.つまり、MySQLはデフォルトのランレベル(2)で起動しなくなります。Vの背後で発生することです。サービスのデフォルトのランレベルディレクトリの下にSスクリプトがある限り、initは起動時にそのサービスを開始します。サービスを再度有効にします。Vがサービスクラッシュを処理する方法を見てみましょう。+`ファイルを変更して、クラッシュ後にMySQLが自動的に起動できるようにしたことを思い出してください。次の行を追加しました。/usr/bin/mysqld_safeこれは、クラッシュ後にMySQLサービスが開始されるようにするためでした。それが発生するかどうかを確認するには、まずサーバーを再起動します。rebootサーバーが戻ったら、SSHでサーバーに接続し、以前のようにMySQLプロセスIDを確認します。+`のプロセスIDに注意してください。私たちの場合、これらはそれぞれ895と1019でした。-95分ほど待ってから、コマンドを実行します。status出力には、次の行から始まるMySQLサービスが実行されていることが示されます。`プロセスの両方が起動していることがわかります。プロセスをさらに数回強制終了してみてください。いずれの場合も、5分後に再起動するはずです。+`に追加の行を追加した理由です。Vサービスを構成する方法です。サービスの自動再起動を追加するときは注意してください。サービスが2分以内に再生成を試みて10回以上失敗すると、Linuxは次の5分間の再生成を無効にします。これは、システムが安定したままであり、コンピューティングリソースが不足しないようにするためです。コンソールでそのようなイベントに関するメッセージを受信した場合、またはシステムログでそれを見つけた場合、クラッシュし続けるため、修正が必要なアプリケーションに問題があることがわかります。新興企業の紹介クラシックSysVinitは、Upstartが登場する前から長い間、主流のLinuxディストリビューションの一部でした。Linux市場が成長するにつれて、ジョブとサービスをロードするシリアル化された方法は、より時間がかかり複雑になりました。同時に、ホットプラグ可能なストレージメディアなどの最新のデバイスが市場で急増するにつれて、SysVinitはそれらを迅速に処理できないことがわかりました。OSのより高速なロード、クラッシュしたサービスの適切なクリーンアップ、およびシステムサービス間の予測可能な依存関係の必要性により、より優れたサービスマネージャーが必要になりました。Ubuntuの開発者は、初期化の別の手段であるUpstartデーモンを思いつきました。initよりも優れています。Upstartは、サービスをロードおよび管理するための難解なシェルスクリプトを処理しません。Vのようなサービスを連続してロードしません。これにより、システムの起動時間が短縮されますUpstart’sは柔軟な_event_システムを使用して、さまざまな状態でのサービスの処理方法をカスタマイズしますUpstartには、クラッシュしたサービスがどのように再生成されるべきかを処理するより良い方法があります同じスクリプトを指す冗長なシンボリックリンクをいくつも保持する必要はありません。Vと下位互換性があります。Vサービスを管理するためにまだ実行されています新興イベントUpstartでは、複数の_events_をサービスに関連付けることができます。このイベントベースのアーキテクチャにより、Upstartはサービス管理を柔軟に処理できます。各イベントは、そのイベントを処理するシェルスクリプトを起動できます。Upstartイベントには以下が含まれます。停止これらのイベントの間に、サービスは次のようないくつかの_states_にあります。止まるetc.Upstartはこれらの各状態に対してもアクションを実行でき、非常に柔軟なアーキテクチャを作成します。+`スクリプトも実行します。initスクリプトを通常どおり実行します。+`ディレクトリの下を見て、各サービス設定ファイルでシェルコマンドを実行します。スタートアップ構成ファイルUpstartは構成ファイルを使用してサービスを制御します。VのようにBashスクリプトを使用しません。configuration_ファイルを使用します。ファイルには、_stanzas_と呼ばれる異なるセクションのプレーンテキストコンテンツが含まれています。各スタンザは、サービスのさまざまな側面とその動作を説明します。post-stop_など、さまざまなスタンザがサービスのさまざまなイベントを制御します。スタンザ自体にはシェルコマンドが含まれています。したがって、各サービスのイベントごとに複数のアクションを呼び出すことができます。各構成ファイルは、次の2つのことも指定します。+`と混同しないでください)。アップスタートの例UpstartがMySQLサーバーを再び処理する方法を見てみましょう。今回はより多くの背景知識があります。14.04ドロップレットに戻ります。SSHコマンドを使用してサーバーに接続します(WindowsユーザーはPuTTyなどのツールを使用して接続できます)。+`ディレクトリにあります。これは、新しいサービスを作成するときに使用する必要があるディレクトリです。サーバーにログインしたら、次のコマンドを実行します。lessその結果、多数のサービス構成ファイルが一度に1画面ずつ表示されます。これらは、Upstartの下でネイティブに実行されるサービスです。initサービスと比較します。+`ファイルを見てきました。それでは、別の設定ファイルを開きましょう:cronデーモン用です。/etc/init/cron.confご覧のとおり、これはcronデーモンのかなり単純な構成ファイルです。+`デーモンを開始するようUbuntuに指示します。2、3、および4はネットワークが有効なマルチユーザーテキストモードで、5はマルチユーザーグラフィカルモードです。サービスは他のランレベル(0、1、6など)では実行されません。+`ディレクティブは、Upstartにプロセスをコンソールから切り離してバックグラウンドで実行するよう指示します。+`ディレクティブです。これは、何らかの理由でcronがクラッシュした場合にcronが自動的に開始することをシステムに伝えます。変更を加えずにエディターを終了します。cron構成ファイルは、かなり小さな構成ファイルです。MySQL構成ファイルは、cron構成ファイルと構造的に類似しています。開始、停止、およびリスポーンのスタンザもあります。開始前および開始後イベント用の2つのスクリプトブロックもあります。これらのコードブロックは、mysqldプロセスが起動中または起動済みのときに実行するものをシステムに指示します。Upstartに関するチュートリアル]。14.04サーバーのMySQLインスタンスは、デフォルトでブート時に自動起動するように設定されています。無効にする方法を見てみましょう。Upstartでは、サービスの無効化は、「。」の下のファイルの存在に依存します。このファイルを使用してMySQLを無効にする方法を確認するには、次のコマンドを実行してMySQLのこのオーバーライドファイルを作成します。/etc/init/mysql.overrideこの単一行を追加します。/etc/init/mysql.overridemanual変更を保存してください。次に、サーバーを再起動します。mysql出力は次のようになります。stop/waitingこれは、MySQLが起動しなかったことを意味します。+`ディレクティブが変更されているかどうかを確認します。[2345]MySQLを再度有効にするには、オーバーライドファイルを削除してサーバーを再起動します。rebootサーバーが再起動したら、リモートでサーバーに接続します。+`コマンドを実行すると、サービスが自動的に開始されたことが表示されます。ステップ5-クラッシュ時のMySQL起動動作のテストデフォルトでは、MySQLはクラッシュ後に自動的に起動します。+`ディレクティブの両方をコメントアウトします。5次のコマンドを実行して、サービスを再起動します。+`がここでは機能しないことが示されたため、サービスを明示的に停止および開始しています。MySQLを表示します。processMySQLのインスタンスのPIDに注意してください。mysql`プロセスをクラッシュした場合、自動的に起動することはありません。プロセスOFを強制終了します(独自の番号に置き換えます)。-9次に、ステータスを確認します。stop/waitingそれぞれの間に時間を空けて、さらに数回ステータスを見つけてください。どの場合でも、MySQLは引き続き停止されます。+`ディレクティブがなくなったために発生しています。+`ディレクティブのより詳細な説明があります。initデーモンの最新のものはsystemdです。実際、initdデーモン以上のものです。systemdは、最新のLinuxシステムの多くのコンポーネントを含むまったく新しいフレームワークです。manager_として機能することです。この能力において、systemdが制御することの1つは、サービスがクラッシュまたはマシンがリブートした場合のサービスの動作です。hereについて読むことができます。Vコマンドおよび初期化スクリプトと下位互換性があります。Vサービスもsystemdの下で実行されます。V管理コマンドがsystemdで動作するように変更されているために可能です。`に名前を変更するため、何も表示されません。+`ファイルがあります。各ユニットファイルはシステムリソースを表します。systemdと他の2つのinitメソッドの主な違いは、systemdがサービスデーモンだけでなく、ソケット、デバイスオペレーティングシステムパス、マウントポイント、ソケットなどの他のタイプのリソースの初期化も担当することです。リソースはこれらのいずれかです。リソースに関する情報は、ユニットファイルで追跡されます。各ユニットファイルは特定のシステムリソースを表し、「。」という命名スタイルを持っています。home.mount`のようなファイルが作成されます。+`ファイルなど)です。これらのファイルは非常に簡単に理解して変更できます。Hatベースのシステムでは、ユニットファイルは2つの場所にあります。