ubuntu前書きこのチュートリアルでは、クラッシュまたはサーバーの再起動後に自動的に再起動するようにシステムサービスを構成する方法を示します。この例ではMySQLを使用していますが、Nginx、Apache、または独自のアプリケーションなど、サーバーで実行されている他のサービスにこれらの原則を適用できます。このチュートリアルでは、最も一般的な3つのinitシステムについて説明しているため、必ずディストリビューション用のinitシステムに従ってください。(多くのディストリビューションは複数のオプションを提供するか、代替のinitシステムをインストールできます。*は、ここで取り上げられている最新のディストリビューションの初期化システムです。[パート2、リファレンス記事]。バックグラウンド実行中のLinuxまたはUnixシステムでは、多数のバックグラウンドプロセスがいつでも実行されます。これらのプロセス-_services_または_daemons_とも呼ばれる-は、オペレーティングシステムにネイティブであるか、アプリケーションの一部として実行される場合があります。*はデータベースデーモンですこれらのサービスは、ウェブサイト、メール、データベース、その他のアプリが常に稼働していることを確認するために継続的に実行されることになっています。管理者として、Linuxサービスに次のことを求めています。失敗することなく継続的に実行するシステムが再起動またはクラッシュした後、自動的に起動しますしかし、これらのサービスが停止し、ウェブサイトやアプリが利用できなくなることがあります。再起動は、さまざまな理由で発生する可能性があります。それは、計画的な再起動、パッチ更新の最後のステップ、予期しないシステム動作の結果などです。クラッシュとは、プロセスが予期せず停止した場合、またはユーザーまたはアプリケーションの要求に応答しなくなった場合に発生することです。この記事の目的は、クラッシュまたはリブート後でも、サービスを再び稼働させることです。継続的な監視とアラートに代わるものはありませんが、Linuxサービスは、_init_システムとも呼ばれるサービス管理デーモンによる処理方法を変更することで、大部分が自己修復できます。これを行う唯一の方法はありません。すべて特定のLinuxディストリビューションとそれに付属するサービス管理デーモンに依存します。多くの一般的なオペレーティングシステムのデフォルトの初期化システムは、上記の概要に示されています。目標この2部構成のチュートリアルでは、システムの再起動またはクラッシュ時にLinuxサービスを自動的に開始するように構成する方法を説明します。このシリーズの第1回では、3つの異なる初期化(初期化)モードでそれを行う方法について簡単に説明します。2、コマンドを実行した理由と、それらがバックグラウンドでどのように機能するかを説明します。スタートアップスクリプト、重要なファイル、各initメソッドの構成パラメーターについて説明します。パート2の多くの議論は理論的に思えるかもしれませんが、基本を理解するための有用な参考資料となります。パート1では、自動再起動を設定する実際的な側面のみを取り上げます。Dropletsを作成する(または独自のLinuxサーバーを作成する)必要があります。ドロップレットの作成の詳細については説明しませんが、詳細についてはhttps://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet-virtual-serverをご覧ください。例では異なる分布を使用します。x64(systemd用)各サーバーでsudoユーザーを設定する必要があります。sudoアクセスの有効化に関するチュートリアルを参照してください。*このチュートリアルのコマンド、クエリ、設定を実稼働Linuxサーバーで実行しないでください。*テストの一環としてサービスを中断するため、ライブサーバーに問題が発生することは望ましくありません。initで議論を始めましょう。Vでは、NginxやMySQLなど、インストールできるほとんどの標準アプリケーションは、デフォルトで*再起動後に起動します*が、デフォルトでは*クラッシュ後に起動しません*。+`に独自のinitスクリプトが付属しています。カスタムアプリケーションの場合は、独自の初期化スクリプトを作成し、独自にサービスを自動的に開始できるようにする必要があります。独自のinitスクリプトを作成することはこの記事の範囲外ですが、必要に応じて、既存のサンプルスクリプトを参照して独自のスクリプトを作成できます。Vは、initスクリプトにBashを使用します。Vの自動開始チェックリストこのセクションは、サービスが自動的に開始するように設定されていることを確認するためのクイックリファレンスです。+`に作成されます(これを手動で作成しないでください)。+`からのリンクも表示されることに注意してください。_runlevels_について説明するときに、これらの数値の詳細をご覧ください。+`ファイルの最後に追加します。一般的な例を次に示します。:2345:respawn:サービスを停止してから開始します。startサーバーを再起動します。rebootテストこれらが機能していることをテストするには、次のことができます。grepプロセスを強制終了します。次に、MySQLを使用した実用的な例を見ていきます。*ドロップレットを作成します。ドロップレットが初期化されたら、SSHを使用してサーバーに接続します(WindowsユーザーはPuTTYなどのツールを使用して接続できます)。@次の手順では、アカウントにsudo特権があることを前提としています。ステップ2-MySQLのインストールテストサービスとしてMySQLを使用します。次のコマンドを実行して、MySQLサーバーをインストールします。-y以下に示すようなグラフィカル画面が表示され、新しいルートパスワードを求められます。[MySQLのルートパスワードを提供]次のプロンプトでパスワードを繰り返します。ENTER」を押して確認します。MySQLがインストールされると、行がスクロールします。インストールが完了したら、次のコマンドを実行してインストールを強化します。mysql_secure_installationこれにより、現在のルートパスワードが要求されます。」を押して匿名ユーザーを削除し、リモートルートログインを無効にして、テストデータベースを削除します。+」を押して特権テーブルをリロードします。これでMySQLのインストールが完了しました。サービスが実行されているかどうかを確認するには、次のコマンドを実行します。status出力には数行の情報が表示され、そのうちの1行にはMySQLサービスが実行されている時間(稼​​働時間)が表示されます。0.0.ステップ3-再起動後に自動起動するようにMySQLを構成するデフォルトでは、MySQLは再起動後に起動するようにすでに設定されています。`ディレクトリにMySQLのinitスクリプトへのこのシンボリックリンクが表示されるはずです。これらのシンボリックリンクを手動で作成しようとしないでください。+」コマンドを使用します。+`スクリプトがある限り、initはサーバーの起動時にサービスを開始します。したがって、MySQLが実行されているはずです。次に、起動時に自動起動することを確認します。次のコマンドでマシンを再起動します。rebootサーバーがオンラインに戻ったら、SSHで接続します。status`コマンドを再度実行します。繰り返しますが、サービスは実行中として表示されます。オペレーティングシステムの起動時にサービスが自動的に開始されます。すべてのサービスがこのようになるわけではありません。そのような場合、自動再起動のためにサービスを手動で構成する必要があります。+`コマンドを使用すると、ブート時に自動的に開始されるサービスを追加(または削除)できます。MySQLサービスを無効にして、自動開始のために再度有効にする方法を見てみましょう。このコマンドを実行して、MySQLを無効にします。disableテストするには、サーバーを再起動します。rebootSSHを使用してサーバーに接続します。MySQLクライアントツールを使用してMySQLへの接続を試行します。-p次のメッセージが表示されます。(2)サービスを再度有効にします。enable出力は次のようになります。sequencing起動時にサービスを自動開始するように有効にしても、サービスが停止しても自動的に開始されないことに注意してください。MySQLを起動するには、次のコマンドを実行します。startステップ4-クラッシュ後に自動起動するようにMySQLを構成するサービスが再び実行されたので、クラッシュ後に自動的に開始されるかどうかを見てみましょう。Vでは、デフォルトでは自動的に起動しません。プロセスを突然強制終了してクラッシュをエミュレートします。次のコマンドを実行してプロセスIDを見つけます。mysql出力は次のようになります。+`の親プロセスです。1167と1292を持っていることがわかります。それらのプロセス番号は、上の赤で強調表示されています。+`コマンドでクラッシュをエミュレートしましょう。独自のプロセスIDを使用してください。-9サービスの状態を確認します。status出力には、サービスが停止したことが示されます。再起動できますが、それは手動のプロセスです。再起動は自動的に行われます。inittab`ファイルを編集する必要があります。initが読み取る最初のファイルであることを理解しましょう。+`は、クラッシュした場合のプロセスの動作を決定します。一部のプロセスでは、サービスを再生成することを意図しています。MySQLがこれらのサービスに含まれていることを確認する必要があります。最初にコピーを作成しましょう。/etc/inittabファイルの最後に、次の行を追加します。mysqld_safeプロセス+`を_respawn_します。4つのフィールドがあり、それぞれがコロン(:)で区切られています。ms:+`最初の2文字はプロセスの_id_を指定します。2番目のフィールドは、適用対象の_runlevels_を指定します。この場合、ランレベル2、3、4、および5用です。+`ファイルに戻り、クラッシュ後のMySQLの自動起動にどのように役立つかを確認します。ここでは、ファイルを保存してエディターを終了します。サービスを再度開始します。startサーバーを再起動して、変更を有効にします。5分間待機*してからコマンドを実行します。status今回は、クラッシュ後にMySQLが自動的に起動したことがわかります。MySQLは、サービスのクラッシュまたはシステムの再起動後に自動的に起動します。6で最初に導入されました。6とその派生製品に採用されました。OSもUpstartを使用しています。6Ubuntuの現在のLTSバージョン(執筆時点では14.04)で強力になっていますが、systemdを支持してどこでも段階的に廃止されています。これについては前のセクションで説明します。Vよりも優れており、理解も容易です。チュートリアルのこの部分ではUpstartについて詳しく説明しません。DigitalOceanにはhttps://www.digitalocean.com/community/tutorials/the-upstart-event-system-what-it-is-and-how-to-use-it[Upstartの非常に良いチュートリアル]がありますコミュニティ。今日は、主にUpstart構成ファイルに焦点を当て、それらを使用してサービスを自動開始する方法を確認します。Upstartは構成ファイルを使用してサービスを制御します。+`ディレクトリの下にあります。ファイルには、_stanzas_と呼ばれる読みやすいセクションを含むプレーンテキストコンテンツが含まれています。各スタンザは、サービスのさまざまな側面とその動作を説明します。デフォルトでは、インストールできるNginxやMySQLなどのほとんどの標準アプリケーションは、*再起動後に起動*し、デフォルトでは*クラッシュ後に起動*するため、この作業を行うために何もする必要はありません。+`に独自のinitスクリプトが付属しています。カスタムアプリケーションの場合は、これを自分で設定する必要があります。独自のカスタムUpstartスクリプトを作成する方法については、https://www.digitalocean.com/community/tutorials/the-upstart-event-system-what-it-is-and-how-to-use-itをご覧ください前に参照した[Upstart入門チュートリアル]。Upstartの自動起動チェックリストこのセクションは、サービスが自動的に開始するように設定されていることを確認するためのクイックリファレンスです。+(あなたまたは別の管理者が以前に作成した場合にのみ存在します)サービスを停止してから開始します。startサーバーを再起動します。rebootテストこれらが機能していることをテストするには、次のことができます。grepプロセスを強制終了します。14.04サーバーを使用して、Upstartのデモを行います。SSHでサーバーに接続します(WindowsユーザーはPuTTyなどのツールを使用して接続できます)。@次の手順では、アカウントにsudo特権があることを前提としています。ステップ2-MySQLのインストール次に、MySQLをインストールします。次のコマンドを実行して、パッケージリストを更新します。updateMySQLサーバーをインストールします。-yMySQLの新しいルートパスワードを作成し、プロンプトが表示されたら確認します。+`コマンドを実行します:mysql_secure_installationDebianにインストールするときに以前に行ったのと同じ回答をプロンプトに提供します(前のセクションを参照)。ステップ3-再起動後に自動起動するようにMySQLを構成するデフォルトでは、MySQLは再起動後に自動的に起動します。この方法で独自のサービスをセットアップできるように、その構成を確認すると便利です。MySQLサーバープロセスが実行されているかどうかを確認しましょう。mysql次のような出力が表示されます。2553サーバーを再起動します。rebootサーバーがオンラインに戻ったら、SSHを使用して再接続します。MySQLのステータスを確認します。mysql出力には、MySQLが自動的に開始されたことが示されます。したがって、サービスを有効にするためにここで特別なことをする必要はありません。+`ディレクトリに独自のUpstartファイルを作成してサービスを手動で有効にする必要がある他のアプリケーションデーモンには当てはまらない場合があることに注意してください。initファイルを見てみましょう。/etc/init/mysql.confUpstartファイルは、Debianマシンで見たようなシェルスクリプトではありません。MySQLの初期設定ファイルには、開始前および開始後イベント用のスクリプトブロックがあります。これらのコードブロックは、mysqldプロセスが起動中または起動済みのときに実行するものをUpstartシステムに指示します。ファイルの最初の10行を詳しく見てみましょう。5MySQLはランレベル2、3、4、5で起動するはずであり、ランレベル0、1、6で実行するはずではないことがわかります。ここで、Upstartデーモンのサービス起動動作を定義します。Vとは異なり、Upstartではサービス構成ファイルを使用します。+`スタンザを追加/変更することです。パート2では、このファイルを使用して、MySQLサービスの有効化と無効化がこのファイルにどのように影響するか、およびその逆を確認します。+`ディレクティブはクラッシュ後にサービスを再起動するため、次のステップでそれらについて説明します。+`を開いておく必要があります。+`ディレクティブは一目瞭然です。MySQLがクラッシュすると起動します。これはデフォルトですでに有効になっています。その後のディレクティブはより興味深いものです。`ディレクティブは、秒単位で指定された間隔で、クラッシュしたサービスの再起動をLinuxが試行する回数を規定します。このしきい値内でサービスが正常に起動(再起動)しない場合、サービスは停止状態のままになります。サービスが継続的にクラッシュしている場合は、システム全体の安定性に影響を与えるよりも、サービスを無効にする方が適切であるため、この正常なデフォルトの動作です。今のところ、変更を加えずにテキストエディタを終了します。これまで見てきたように、デフォルトではMySQLはクラッシュ後に自動的に復帰するようにも設定されています。これをテストするには、サービスPIDを確認しましょう。mysqlシステムの新しいPID(再起動後)は次のようになります。processテストケースのプロセスIDを書き留めます。+`コマンドでプロセスを強制終了してクラッシュをエミュレートします。-9MySQLのステータスを今すぐ確認してください。新しいPIDを使用して(即時または数秒以内に)実行する必要があります。mysqlこの場合、新しいPIDは1552です。process必要に応じて、再び殺すことができます。+`ディレクティブが原因で発生しています。/etc/init/mysql.confrespawnMySQLにはデフォルトでクラッシュ後に再起動する機能がありますが、他のサービスの場合は、このディレクティブを手動でUpstartファイルに追加する必要があります。繰り返しになりますが、パート2では、構成ファイルからクラッシュ動作を変更する方法を説明します。manager_であり、ほとんどの新しいLinuxディストリビューションの事実上の初期化デーモンになっています。15.04にはネイティブsystemdも同梱されています。他のディストリビューションはsystemdを組み込んでいるか、まもなく発表します。Vコマンドおよび初期化スクリプトと下位互換性があります。Vサービスもsystemdの下で実行されます。V管理コマンドは、systemdで動作するように変更されています。replacement_と呼ばれることがよくあります。systemdを使用すると、NginxやMySQLなど、インストールできるほとんどの標準アプリケーションは、デフォルトで*再起動後に起動*し、デフォルトで*クラッシュ後に起動*するため、この作業を行うために何もする必要はありません。+`に独自のinitスクリプトが付属しています。カスタムアプリケーションの場合は、独自の初期化スクリプトを作成し、独自にサービスを自動的に開始できるようにする必要があります。ここでは、カスタムinitスクリプトの詳細については詳しく説明しませんが、https://www.digitalocean.com/community/tutorials/how-to-use-systemctlでsystemdの詳細を読むことができます。-systemd-services-and-unitsの管理[systemdの紹介記事]。systemdの自動開始チェックリストこのセクションは、サービスが自動的に開始するように設定されていることを確認するためのクイックリファレンスです。+`コマンドを使用します。/usr/lib/systemd/system/.serviceこれにより、再起動後の自動起動が有効になります。+`のような行も含める必要があります。クラッシュ後にリスポーンするサービスsystemdデーモンをリロードしてから、サービスを再起動します。.serviceテストこれらが機能していることをテストするには、次のことができます。grepプロセスを強制終了します。7とMySQLを使用して、systemdサービスを構成する方法を示します。SSHを使用してサーバーに接続します(WindowsユーザーはPuTTyなどのツールを使用して接続できます)。@sudo特権を持つアカウントを使用していると想定しています。Serverリポジトリをダウンロードしてインストールします。mysql-community-release-el7-5.noarch.rpmMySQLサーバーをインストールします。-yインストールが完了したら、mysqldサービスを開始します。(これは、MySQLをDebianおよびUbuntuの下にインストールしたときと同じではないことに注意してください。他のディストリビューションでは、MySQLは自動的に起動しました。+`コマンドを実行します。mysql_secure_installationこの場合、MySQLルートパスワードは空になるため、新しいパスワードを作成することを選択する必要があります。他のプロンプトに対して、DebianまたはUbuntuでインストールしたときと同じ回答を提供します(詳細については、以前のDebianセクションを参照してください)。ステップ3-再起動後に自動起動するようにMySQLを構成するデフォルトでは、MySQLは再起動後に自動的に起動するように設定されています。これがどのように機能するか見てみましょう。+`コマンドを実行します。mysqld.service結果は次のようになります。Outputenabledマシンを再起動しましょう。rebootサーバーが復旧したら、SSHで接続します。次のコマンドを実行して、サービスのステータスを確認します。mysqld.service出力には、サービスが実行されていることが示されます。(mysqld_safe)...サービスを無効にするには、次のコマンドを実行します。mysqld.serviceこれはサービスを停止しませんが、無効にします。実際、出力はシンボリックリンクが削除されたことを示しています。'/etc/systemd/system/mysql.service'必要に応じて、サーバーを再起動し、MySQLサーバーが実行されているかどうかを再度テストして確認できます(実行されません)。is-enabled`を再度実行します。disabled`の応答を取得する必要があります。mysqld.serviceOutputdisabledサービスを再度有効にします。mysqld.service出力には、再作成されるシンボリックリンクが表示されます。'/etc/systemd/system/multi-user.target.wants/mysqld.service'サービスは再起動後に自動的に開始されます。ステップ4-クラッシュ後に自動起動するようにMySQLを構成する次に、クラッシュ後に自動起動するようにMySQLがどのように構成されているかを確認します。mysql.service`ユニットファイルを開きます(systemdサービスは設定にユニットファイルを使用することに注意してください)。/etc/systemd/system/multi-user.target.wants/mysqld.serviceファイルの最後に、再起動のディレクティブがあります。これは、クリーンまたはクリーンでない終了コードまたはタイムアウトでMySQLサービスが再起動することを意味します。それがsystemdで自動再起動が定義される場所です。+`パラメーターは、クラッシュした場合のサービスの動作を定義します。すべてのsystemdサービスでこの機能がデフォルトで有効になっているわけではありません。`セクションの下にこの追加のディレクティブを追加するだけです。+`ヘッダーも追加する必要があります。クラッシュをエミュレートするには、最初にエディターを終了してから、MySQLプロセスIDを確認します。+`シグナルでこのプロセスを強制終了します。この場合、メインPIDは661です。PIDを独自のものに置き換えます。-9ステータスを確認します。mysqld.service出力は、MySQLが新しいPIDで再起動したことを示します(この場合、新しいプロセスIDは11217です)。(mysqld_safe)......したがって、クラッシュした後でもサービスが起動することがわかります。V、Upstart、およびsystemdサービスを再起動またはクラッシュ後に自動起動するように構成する方法を説明しました。この動作を制御するファイル、構成パラメーター、およびコマンドも確認しました。これは、より実践的な導入でした。このシリーズの次回の記事では、概念と基本について詳しく説明します。Dropletsを削除しないでください-https://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-でそれらに戻るので、それらを実行し続けてくださいクラッシュ後またはリブートパート2参照後に自動的に[次のパート]。