はじめに
コンピューティングにおいては、物事が常に計画通りに進むとは限りません。予期しないシステムクラッシュが発生すると、システム管理者は再起動や個々のサービスの再起動を余儀なくされることがよくあります。システムクラッシュや再起動の後に、アプリケーションの実行に必要なすべてのサービスを特定して再起動するのは面倒な作業です。2部構成のチュートリアルのこの第1部では、システムクラッシュやサーバーの再起動後にサービスが自動的に起動するように設定する方法を、具体的な例を交えて説明します。第2部では、第1部で達成した内容に関する理論的な情報について説明します。
具体的な例として、MySQL データベースサービスを使用します。ただし、サーバー全体を構成する他のプロセス、例えば Nginx, Apache, Redis、またはその他のアプリケーションにも同じ原則が適用されます。以下のチュートリアルもご覧いただけます:MySQL, Nginx、および Apacheのインストール方法.
In Linux ディストリビューションには、実行しているディストリビューションに応じて、主に3つの 初期化(init)システム があります。一部のディストリビューションには、以下に示すように2つ以上のinitシステムが搭載されている場合があります:
- System V – 以下のような古いディストリビューションに搭載されている古いinitシステムです:
- Ubuntu 9.04以前
- CentOS 5以前
- Debian 6以前
- Upstart – 以下のような以前のディストリビューションで使用されていました:
- CentOS 6
- Ubuntu 9.10からUbuntu 14.10、およびUbuntu 14.04
- Systemd – 以下のような最新のディストリビューションで使用されています:
- CentOS 7
- Debian 7および8
- Ubuntu 15.04以降
背景
オペレーティングシステム、特にLinuxやUnix システムでは、プロセスやサービスがバックグラウンドで実行されているのが一般的です。このようなサービスは、オペレーティングシステムのソフトウェアに最初から含まれている場合もあれば、インストールしたユーザーアプリケーションに付属している場合もあります。
オペレーティングシステムのサービスには以下が含まれます:
- sshd – リモート接続を許可するデーモンです。
- cupsd – 印刷を制御するデーモンです。
インストールされたアプリケーションのサービスには以下が含まれます:
- httpd/apache2 – Apache2 Webサーバーに付属するサービスです。
- nginx – Nginx Webサーバーに付属するサービスです。
Webアプリケーション、データベース、メールサーバーなどにアクセスできるようにするには、これらのサービスが継続的に実行されている必要があります。システム管理者や好奇心旺盛なアプリ開発者であれば、これらのサービスが継続的に実行され、万が一システムがクラッシュした場合でも、システムの再起動後に自動的に起動するようにしたいと思うでしょう。この実践的なチュートリアルでは、まさにその方法を学びます。
アラートを設定し、Linuxディストリビューションを継続的に監視することは極めて重要ですが、一部のLinuxサービスは、サービスを管理するinitシステムのおかげで、適切に設定されていれば自己修復することができます。
Linuxディストリビューションには、システム初期化を実行する動作モードがあり、これはランレベル と呼ばれます。サービスを自動起動するには、ランレベルに追加する必要があります。すべてのLinuxおよびUnix系システムには、以下に示す4つの共通のランレベルがあります:
- 0 – ランレベル0はシステムのシャットダウンを示します。
- 1 – ランレベル1はシングルユーザー、レスキューモードを示します。
- 2, 3, 4 – これらのランレベルは、システムがマルチユーザー、ネットワーク有効、テキストモードで起動した状態を示します。
- 5 – ランレベル5はマルチユーザー、ネットワーク有効、グラフィカルモードを示します。
- 6 – ランレベル6はシステムの再起動を示します。
このチュートリアルでは、先ほど説明した3つの異なるinitモード(System V、Upstart、Systemd)を使用して、システムの再起動時にLinuxサービスが自動的に起動するように設定する方法を学びます。.
前提条件
この実践的なチュートリアルを進めるには、Linux VPSが必要です。Cloudsigmaの無料トライアル期間を利用して、いくつかのサーバーを起動し、コマンドを試すことができます。また、当社のUbuntuサーバーのセットアップ方法に関するステップバイステップのチュートリアルを参考に進めることもできます。.
このチュートリアルで作成するサーバーは、純粋にハンズオンの実践を進めるためのものであり、多くのサービスが中断されるため、本番サーバーでコマンドを試さないでください。
必要となるディストリビューションの一部:
- Ubuntu 9.04以前、またはDebian 6 x64(System V initシステムのデモに使用します)
- Ubuntu 14.04 x64(Upstartのデモに使用します)
- CentOS 7 x64 (systemdのデモに使用されます)。
sudo権限を持つ非rootユーザーが設定されていることを確認してください。こちらのsudoersファイルの構成に関するチュートリアルをご覧ください.
System Vの使用
これは、以下のような以前のLinuxディストリビューションで使用されていた最も古いinitシステムです。
- Debian 6以前
- CentOS 5以前
- Ubuntu 9.04以前
MySQLやNginxなど、インストール可能なほとんどのサーバーアプリケーションには、デフォルトで/etc/init.dディレクトリに保存されたinitスクリプトが付属しています。これらのスクリプトにより、再起動後に起動できるようになります。ただし、システムクラッシュ後に自動的に起動するように設定されていない場合があります。
System Vの自動起動チェックリスト
最初のステップは、/etc/init.d/serviceディレクトリに機能するBash initスクリプトが存在するかどうかを確認することです。サービスを有効にするには、DebianまたはUbuntuディストリビューションでは、update-rc.dコマンドを使用し、CentOSシステムでは、chkconfigを使用します。実際のサービス名に置き換えてください:
|
1 |
sudo update-rc.d service enable |
上記のコマンドは、/etc/rc2.dディレクトリに以下のようなシンボリックリンクを作成します。自動生成されるため、自分で作成しないでください:
|
1 |
lrwxrwxrwx 1 root root 20 Dec 10 07:09 S02mysql -> ../init.d/service |
ファイル/etc/inittabの末尾に、以下の一般的な例に示すようにrespawn行を追加します。アプリケーションの起動スクリプトの実際のパスに置き換えることを忘れないでください:
|
1 |
id:2345:respawn:/bin/sh /path/to/your-application/startup |
サービスを停止および起動するには、次のコマンドを入力します:
|
1 2 |
sudo service service-name stop sudo service service-name start |
次に、サーバーを再起動します:
|
1 |
sudo reboot |
変更をテストする方法は?
サーバーを再起動した後、次のコマンドを使用してプロセス番号を検索し、サービスが起動していることを確認します:
|
1 |
ps -ef | grep service-name |
次のコマンドを使用してプロセスを強制終了します:
|
1 |
sudo kill -9 process_number |
5分後、サービスが起動して実行されていることを確認します。
実際のサービスを使用した実践的なSystem Vの構成
次のステップでは、MySQLなどの実際のサーバーアプリケーションを試してみます。次の環境にアクセスできる必要があります:Debian 6 仮想マシン。sudo権限を持つアカウントを使用して、SSHまたはputty(Windowsデスクトップを使用している場合)で接続します。
ステップ1:MySQLのインストール
次のコマンドを入力してMySQLをインストールします:
|
1 |
sudo apt-get install mysql-server -y |
インストールが開始されると、rootパスワードの入力を求められます。任意のパスワードを入力し、確認してください。インストールが完了するのを待ってから、次のコマンドを入力してMySQLのセキュリティ設定を開始します:
|
1 |
mysql_secure_installation |
先ほど入力したrootパスワードの入力を求められます。維持するにはNを押します。次に、Yを押して、匿名ユーザーの削除、リモートrootログインの無効化、テストデータベースの削除に関する以降のプロンプトを受け入れます。最後に、変更を自動的に反映させるために権限テーブルの再読み込みを受け入れます。
これでMySQLのインストールは完了です。次のコマンドを入力して、サービスが実行されているかどうかを確認できます:
|
1 |
service mysql status |
ステップ2:再起動後にMySQLが自動起動するように構成する
MySQLはデフォルトで、システムの再起動後に起動するように構成されています。MySQL初期化スクリプトへのシンボリックリンクは、/etc/rc2.dディレクトリにあります。これらのシンボリックリンクは手動で作成されたものではありません。また、update-rc.dコマンドを使用して、サービスを有効または無効にすることができます。
次のコマンドを入力して、ディレクトリの内容を一覧表示します:
|
1 |
ls -l /etc/rc2.d |
MySQL initスクリプトへのシンボリックリンクがあるか確認してください:
|
1 |
lrwxrwxrwx 1 root root 15 Dec 2 10:42 S01mysql -> ../init.d/mysql |
The Sは重要です。なぜなら、S サービスのデフォルトのランレベルディレクトリの下にあるスクリプトにより、サーバーの起動時にinitシステムがサービスを開始します。再起動後にMySQLが自動起動することを確認するには、次のコマンドを入力してシステムを再起動します。
|
1 |
sudo reboot |
再起動中にssh接続が切断されます。1、2分待ってから再接続してください。次のコマンドを実行して、サービスが実行中かどうかを確認します。
|
1 |
service mysql status |
出力はサービスが実行中であることを示します。これは、再起動後に自動的に開始されたことを意味します。自動起動するように設定されていないサービスについては、自分で設定する必要があります。
MySQLサービスを無効にしてシステムを再起動し、自動起動するかどうかをテストできます。DebianおよびUbuntuシステムでは、update-rc.d コマンドを使用して、initシステムからサービスを追加または削除できます。次のコマンドを入力して、MySQLサービスを無効にします。
|
1 |
sudo update-rc.d mysql disable |
システムを再起動し、sshを使用して再接続します。次のコマンドを使用してMySQLへの接続を試みます。
|
1 |
mysql -u root -p |
次のようなMySQLエラーが発生します。
|
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server |
次に、以下のコマンドを入力してサービスを再度有効にします。
|
1 |
sudo update-rc.d mysql enable |
CentOSディストリビューションを使用している場合、コマンドは次のようになります。
|
1 |
sudo chkconfig mysql enable |
MySQLは最初は起動していないため、起動する必要があります。次のコマンドを入力します。
|
1 |
sudo service mysql start |
ステップ 3: システムクラッシュ後に自動起動するようにサービス(MySQL)を設定する
System Vは、クラッシュ後にプロセスを自動的に開始しません。MySQLのプロセスIDを見つけて強制終了することで、システムクラッシュをシミュレートできます。次のコマンドを入力して、MySQLのプロセスIDを見つけます。
|
1 |
ps -ef | grep mysql |
出力から、MySQLプロセスを見つけます。MySQLを実行している主なプロセスはmysqld_safeとmysqldです。それらのプロセスID(これらは数字です)をメモし、次のコマンドを使用してそれらを強制終了します。
|
1 2 |
sudo kill -9 mysqldsafe_number sudo kill -9 mysqld_number |
次のコマンドを使用して、MySQLサービスの状態を確認します。
|
1 |
sudo service mysql status |
出力はMySQLが停止したことを示します。service startコマンドを使用して手動で再起動できます。しかし、自動的なプロセスが必要です。この自動的な動作を実現するには、/etc/inittab ファイルを編集する必要があります。これは、System V initが起動時に最初に読み込むファイルです。/etc/inittab ファイルには、プロセスがクラッシュした場合の動作に関する指示が含まれています。適切に設定されていれば、クラッシュが発生したときにシステムを再起動します。今回のケースでは、MySQLがそれらのサービスの1つであることを確認したいと考えています。
この /etc/inittab ファイルは、Linuxディストリビューションにとって極めて重要です。システムが再起動するかどうかを決定します。コマンドを間違えると、再起動時にシステムが起動しなくなる可能性があります。前述の通り、これらのコマンドは本番環境ではなく、テストサーバー環境でのみ試していることを願っています。
まず、編集を開始する前にファイルのコピーを作成します。
|
1 |
sudo cp /etc/inittab /etc/inittab.original |
次に、nanoを使用してファイルを開きます。
|
1 |
sudo nano /etc/inittab |
ファイルの末尾までスクロールし、次のコードスニペットを追加します。
|
1 |
ms:2345:respawn:/bin/sh /usr/bin/mysqld_safe |
上記のコマンドは、システムクラッシュ後にmysql_safeプロセスを再起動します。以下で説明するように、コロンで区切られた4つのフィールドがあります。
- ms: プロセスのIDを指定します。
- 2345: コマンドが適用されるランレベルを指定します。この場合は、ランレベル2、3、4、5です。
- respawn: アクションを指定します。この場合、プロセスを再生成(respawn)または再起動します。
- /bin/sh /usr/bin/mysqld_safe: 最後の部分はプロセスを定義します。つまり、プロセスを再起動するために実行されるコマンドです。
ここで Ctrl + O を押してから Enter を押してファイルを保存します。次に、Ctrl + X を押してエディタを閉じます。以下のコマンドを入力してサービスを開始します:
|
1 |
sudo service mysql start |
サーバーを再起動し、先ほど説明したコマンドを実行してプロセス番号を見つけます。次に、以下のコマンドから始めてプロセスを強制終了します:ps -ef | grep mysql。数分待ってから、次のコマンドを入力してMySQLのステータスを確認します:
|
1 |
sudo service mysql status |
出力結果は、MySQLサービスが起動して実行中であることを示しているはずです。これは、クラッシュ後に再起動できたことを意味します。サーバー上の他のサービスに対しても同じプロセスを実行できます。
Upstartによるサービスの自動起動
Upstartは、最初はUbuntu 6で導入され、後にUbuntu 9.10でデフォルトになったもう一つのinitシステムです。RHEL 6とその派生ディストリビューション、およびGoogleのChrome OSもUpstart initシステムを使用しています。このセクションの手順を進めるには、以下のいずれかのディストリビューションを実行しているサーバーが必要です:
- Ubuntu 9.10からUbuntu 14.10、およびUbuntuのLTSバージョン(Ubuntu 14.04など)。
- CentOS 6
再起動やシステムクラッシュの際にサーバーサービスを自動起動するようにUpstartファイルを設定する方法を見てみましょう。Upstartは、次のディレクトリの下に保存されている設定ファイルを使用します:/etc/init(このディレクトリはLinuxディストリビューションのサービスを制御するためのものです)。MySQLやNginxなどのサーバーアプリケーションの最新バージョンの多くは、独自のinitスクリプトを次のディレクトリにインストールします:/etc/init。そのため、何も操作しなくても、再起動後やシステムのクラッシュ後に自動的に起動します。
Upstartの自動起動チェックリスト
サービスが自動的に起動するように設定されているか確認するための、いくつかの参考設定を以下に示します。
- サービスが次のディレクトリにinitスクリプトを持っていることを確認します:/etc/init/service_name.conf – service_name(ここで、service_nameは特定のサービスの実際の名前です)。次のファイル内の2行を確認してください:/etc/init/service_name.conf:
- 次のような内容を含む行:start on runlevel [2345]。これは、システム再起動時にサービスが開始されることを示します。
- 次のような内容を含む行:respawn。これは、システムクラッシュ後にサービスが再生成/再起動されることを示します。
- 次のディレクトリにサービスオーバーライドファイルがないことを確認します:/etc/init/service_name.override(あなたや他のシステム管理者が以前に作成した場合を除きます)。
- サービスを停止および開始するには、次のコマンドを入力します:
|
1 2 |
sudo initctl stop service_name sudo initctl start service_name |
- システムを再起動し、数分後に再接続します。それでは、正常に動作しているか確認するためにいくつかのテストを実行してみましょう。
- 再起動後、サービスが起動して実行中であることを確認します。次のコマンドを入力してプロセス番号を検索します。service_nameはテストしているサービスの実際の名前に置き換えてください:
|
1 |
ps -ef | grep service_name |
- プロセス番号がわかったら、次のコマンドを入力してプロセスを強制終了します:
|
1 |
sudo kill -9 process_number |
- 数秒待ってから、プロセスが再び起動して実行中であることを確認します。
実際のサービスを使用した実践的なUpstart設定
次のセクションでは、実際のサービスでUpstartを使用する方法を実演します。テストは、MySQLをサービスとするUbuntu 14.04仮想マシンサーバーで実行します。Windowsを使用している場合は、sshまたはputtyを使用してUbuntu 14.04テストサーバーに接続します。通常通り、sudo権限を持つ非rootユーザーを使用してください。ログインしたら、手順を開始できます:
ステップ1:MySQLのインストール
新しいソフトウェアをインストールする前に、必ずパッケージを更新することを忘れないでください:
|
1 |
sudo apt-get update |
次に、以下のコマンドを入力してMySQLサーバーをインストールします:
|
1 |
sudo apt-get install mysql-server –y |
プロンプトが表示されたら、rootパスワードを作成します。インストールが完了するのを待ち、次のコマンドを実行してMySQLインストールのセキュリティ設定を開始します:
|
1 |
mysql_secure_installation |
前のセクションで行ったように、プロンプトに従って進めてください。その後、変更を即座に反映させるために権限をフラッシュ(flush privileges)します。
ステップ 2: システム再起動後にサービス(MySQL)が自動起動するように設定する
MySQLは再起動後に自動的に起動するように設定されています。ここでは、カスタムアプリケーションも再起動後に自動起動するように設定する方法を学ぶために、その設定ファイルを確認しているだけです。MySQLサービスはインストール後に自動的に起動しました。しかし、次のコマンドを入力して、実行中であることを確認してみましょう。
|
1 |
sudo initctl status mysql |
MySQLサービスが実行中であることを示す、以下のような出力が表示されるはずです。
|
1 |
mysql start/running, process 2553 |
サーバーを再起動し、再度ログインします。もう一度次のコマンドを入力して、実行中であることをテストします。
|
1 |
sudo initctl status mysql |
出力はMySQLが実行中であることを示し、再起動後に自動的に起動したことを意味します。この場合、何も変更する必要はありません。ただし、この動作は他のアプリケーションでは異なる場合があります。Upstart initシステムが、再起動後にMySQLを自動起動する必要があることをどのようにして認識しているのか疑問に思うかもしれません。MySQLは、Upstartの起動設定ファイルを次の場所にインストールします。/etc/init/mysql.conf。Upstartファイルはシェルスクリプトではなく、起動前(pre-start)および起動後(post-start)のイベント用のスクリプトブロックを含むテキストファイルです。これらのブロックは、MySQLdプロセスが起動中、またはすでに起動しているときに何を実行すべきかをUpstartシステムに指示します。
次のコマンドを入力して、nanoエディタでファイルを開きます。
|
1 |
sudo nano /etc/init/mysql.conf |
ファイルの内容は以下のようになっているはずです。
|
1 2 3 4 5 6 7 8 |
description "MySQL Server" author "Mario Limonciello <superm1@ubuntu.com>" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] respawn respawn limit 2 5 |
見ての通り、startブロックはMySQLにランレベル2、3、4、5で起動し、0、1、6では起動しないように指示しています。アプリケーションのUpstart設定を定義する場合は、このセクションで定義します。respawnブロックは、クラッシュ後に何をすべきかをUpstartに指示します。これについては次のセクションで説明しますので、ファイルはnanoエディタで開いたままにしておいてください。
ステップ 3: クラッシュ後にサービス(MySQL)が自動起動するように設定する
The respawn ディレクティブは、/etc/init/mysql.conf ファイルにおいて、クラッシュ後にMySQLサービスを再起動するようUpstartに指示します。
respawn limitディレクティブは、クラッシュしたMySQLサービスを、秒単位で指定された間隔内に何回再起動を試みるべきかをUpstartに指示します。最初の引数(2)は試行回数を示します。2番目の引数(5)は秒単位の間隔を示します。クラッシュ後、Upstartがしきい値内にMySQLサービスを再起動(respawn)できなかった場合、サービスは停止したままになります。この動作は、継続的にクラッシュするサービスを再起動し続けることでシステムの安定性に影響が及ぶのを防ぐために設計されています。これで、変更を加えずにエディタを閉じることができます。
クラッシュ後にMySQLが自動的に復帰するかどうかをテストしてみましょう。次のコマンドを入力してステータスを確認し、MySQLサービスのプロセス番号を取得します。
|
1 |
sudo initctl status mysql |
出力は以下のようになるはずです。後で使用するため、プロセス番号を控えておいてください。
|
1 |
mysql start/running, process 738 |
次に、以下のコマンドを入力してプロセスを強制終了(kill)します。これによりクラッシュをエミュレートします。前のコマンドで取得したプロセス番号に置き換えてください。
|
1 |
sudo kill -9 7738 |
もう一度次のコマンドを入力して、MySQLのステータスを確認します。
|
1 |
sudo initctl status mysql |
再び実行されているはずですが、おそらく異なるプロセス番号になっています。
|
1 |
mysql start/running, process 1428 |
これは、以下の中の respawn ディレクティブによるものです:/etc/init/mysql.conf ファイル。これにより、システム障害が発生した場合でもMySQLが自動的に起動するようになります。したがって、MySQLデータベースに依存するアプリケーションは期待通りに機能し続けます。
Systemdによるサービスの自動起動
Systemd は、最近のほとんどのLinuxディストリビューションで採用されている初期化システムです。これは、あなたが 新しいVPSを立ち上げる ときに、おそらく使用することになるものです。最初に導入されたのは Fedora です。RHEL 7や、CentOS 7などのその派生ディストリビューションに付属しています。Ubuntu 15.04以降では、Systemdがネイティブに組み込まれています。Systemdは、System Vの初期化スクリプトおよびコマンドと後方互換性があります。したがって、System VのサービスはSystemdの下でも動作するはずです。System VやUpstartで使用されていたほとんどのコマンドは、Systemdで動作するように変更されています。
Systemdを使用すると、MySQLやNginxなどのほとんどのサーバーアプリケーションは、何も変更しなくても、再起動またはシャットダウン後に自動的に起動します。カスタムアプリの場合は、サービスを自動的に再起動するための独自の初期化スクリプトを作成する必要があります。
Systemdに関するより詳細な情報については、当社の Systemctlを使用してSystemdのサービスとユニットを管理する方法に関するチュートリアル.
Systemdの自動起動チェックリスト
サービスがSystemdで自動的に起動するように設定されていることを確認するための、いくつかの参照設定を以下に示します。
- サービスには、次の場所にある機能的なSystemd初期化スクリプトが必要です: /etc/systemd/system/multi-user.target.wants/serviceName.service。ServiceNameは、設定している実際のサービス名です。
- サービスを有効にするためのコマンドは次のとおりです:
|
1 |
sudo systemctl enable serviceName.service |
- このコマンドは、次のディレクトリにシンボリックリンクを作成します: /etc/systemd/system/multi-user.target.wants/ ディレクトリ。これは以下のように見える場合があります:
|
1 |
lrwxrwxrwx 1 root root 11 Dec 1 04:43 /etc/systemd/system/multi-user.target.wants/serviceName.service -> /usr/lib/systemd/system/serviceName.service |
- そのシンボリックリンクが配置されると、起動後の自動再起動が有効になります。
- 変更を有効にするには、システムデーモンをリロードし、次のコマンドを使用してサービスをリロードします:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl restart serviceName.service |
- 再起動後に設定によってサービスが起動するかどうかをテストするには、システムを再起動します:
|
1 |
sudo reboot |
- システムが再起動したら、次のコマンドを使用してプロセス番号を検索します:
|
1 |
ps -ef | grep serviceName |
- プロセス番号をメモし、次のコマンドを使用して強制終了します:
|
1 |
sudo kill -9 process_number |
- 数秒待ってからサービスを再度検索し、復旧していることを確認します。
実際のサービスを使用した実践的なSystemd設定
このセクションでは、Ubuntu 20.04仮想マシン上でMySQLサービスを設定してみます。
ステップ1:仮想プライベートサーバー(Ubuntu 20.04またはCentOS 7 x64)に接続する
VPSにログインするか、Cloudsigmaパネル から作成し、Windowsの場合はsshまたはputtyを使用して接続します。このチュートリアルのセクションでは、Ubuntu 20.04サーバーを使用しています。同じコマンドを CentOS 7 にも適用できます。必ずsudo権限を持つ非rootユーザーを使用してください。
ステップ2:MySQL(設定対象のサービス)をインストールする
まず、システムをアップデートします:
|
1 |
sudo apt update |
次に、以下のコマンドを使用してMySQLサーバーをインストールできます:
|
1 |
sudo apt install mysql-server –y |
次に、以下のコマンドを実行してMySQLのセキュリティ設定を開始します:
|
1 |
sudo mysql_secure_installation |
スクリプトは、VALIDATE PASSWORD(パスワード検証)コンポーネントをセットアップするか、任意の文字を押してコンポーネントを有効にせずに続行するかを尋ねます。次のリンクから、MySQLのパスワード検証コンポーネントの詳細を確認できます。.
1を押して有効にし、次に1を押して中レベルを選択します。強力なパスワード(大文字、小文字、特殊文字、数字の組み合わせ)を入力します。パスワードを確認し、入力したパスワードをrootパスワードとして使用するかどうかを尋ねるプロンプトを確認します。残りのプロンプトについては、前のセクションと同様にyを押して受け入れます。最後に、MySQLの権限をフラッシュして変更を再読み込みします。
ステップ 3: 再起動後にMySQLが自動起動するように設定する
MySQLは再起動後に起動するように設定されているため、変更する必要はありません。ただし、MySQLの設定ファイルを使用して、カスタムファイルの設定方法を学ぶことができます。
まず、MySQLサービスが起動時に開始するように設定されているかどうかを確認します。次のコマンドを入力します(CentOSではMySQLサービスはmysqldと呼ばれていることに注意してください)。
|
1 |
sudo systemctl is-enabled mysql.service |
出力は次のようになります。

次に、以下のコマンドを入力してVPSを再起動します。
|
1 |
sudo reboot |
sshを使用して接続し直し、次のコマンドを入力してMySQLサービスのステータスを確認します。
|
1 |
sudo systemctl status mysql.service |
以下のスクリーンショットのような出力が表示されるはずです。

MySQLサービスを無効にするには、次のコマンドを入力します。
|
1 |
sudo systemctl disable mysql.service |
出力は、MySQLサービスへのシンボリックリンクがSystemdから削除されたことを示しています。

次のコマンドを入力して、Systemd initシステムでサービスが有効になっているかどうかをテストできます。
|
1 |
sudo systemctl is-enabled mysql.service |
出力には無効(disabled)であることが示されます。システムを再起動しても、MySQLは起動時に開始されません。
![]()
次のコマンドを入力してサービスを有効にします。
|
1 |
sudo systemctl enable mysql.service |
出力は、Systemd initで作成されたMySQLサービスへのシンボリックリンクを示しています。

再起動すると、MySQLサービスは自動的に開始されます。
ステップ 4: クラッシュ後にMySQLが自動起動するように設定する
MySQLは、クラッシュ後に自動的に再起動するように設定されています。この設定がSystemdでどのように実装されているかを見てみましょう。Systemdは設定にユニットファイルを使用します。次のコマンドを入力して、nanoでmysql.service設定ファイルを開きます。
|
1 |
sudo nano /etc/systemd/system/multi-user.target.wants/mysql.service |
出力は次のようになります。

ここでの関心事は、Restart ディレクティブです。定義されているように、障害が発生した場合にMySQLは再起動します。Restartディレクティブは、UpstartのRespawnディレクティブと同様に、Systemdで何が起こるべきかを定義します。
すべてのサービスにこのディレクティブがあるわけではありません。クラッシュ後にサービスが再起動するようにするには、いつでも次のRestart ディレクティブを、サービス設定ユニットファイルの [Service] ブロックの下に追加できます。もし [Service] ヘッダーが存在しない場合は、追加してください。ここで、Ctrl + Xを押してエディタを終了します。
クラッシュをエミュレートするには、次のコマンドを入力してMySQLのプロセスIDを見つけます。
|
1 |
sudo systemctl status mysql.service |
ステータス確認コマンドはプロセスIDを表示します。この例では3555です。

次のコマンドを入力してプロセスを強制終了します。サーバーで取得したプロセスIDに置き換えてください。
|
1 |
sudo kill -9 3555 |
次のコマンドを入力してステータスを確認します。
|
1 |
sudo systemctl status mysql.service |
出力はMySQLが実行されていることを示していますが、新しいプロセスIDになっています。これは、クラッシュ後に自動再起動されたことを意味します。

結論
このチュートリアルでは、Linuxディストリビューションにおける3つの初期化システム(System V、Upstart、Systemd)について紹介しました。いずれかの初期化システムを使用して、継続的に実行されているサービスを再起動やシステムクラッシュ後に自動起動するように設定する方法を学びました。これは、サービスを設定する必要があるときの出発点となるはずです。このシリーズのパート1は、主に実践的なチュートリアルでした。この後半はより理論的で、パート1で行ったことのより詳細な内容が含まれています。. パート2でも使用するため、テストサーバーはまだ削除しないでください。
ハッピーコンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。