no image

Linuxデーモンの自動起動(Word Pressの自動起動設定)

1. はじめに

はしへいです。このブログではGCP上にWord Pressをインストールして利用しています。Market PlaceでGoogleから提供されるVMイメージを利用しても良かったのですが、勉強としてnginxを利用したいと考え、CentOS上にWord Pressを構築しています。

Linuxでは過去UpstartやSysVinitを利用したデーモンプロセスの起動が標準でしたが、最近はSystemdが標準のディストリビューションも多く、CentOSでもCentOS7からはSystemdが標準で採用されています。今回Word Pressをインストールした際にはサーバのリブートなどに備え、自動起動の設定を併せて実施しました。

2. SysVinitとSystemdの比較

SysVinitとSystemdとUpstartの簡単な比較表です。 Systemdがこの中では最近開発されたものである為、機能性に優れています。

項目 SysVinit Systemd Upstart
プロセスの
起動順序
必要な物のみ
直列に順番に起動
必要な物のみ
並列に起動
全てを
並列に起動
起動に必要な時間 ×(遅い) (早い) △(比較的早い)
互換性 -(標準) (SysVinit互換モードあり) △(手動で移行が必要)
サポート範囲 △(サービスの起動/終了/
ステータス監視)
(サービスの起動/終了/
ステータス監視/オンデマンドアクティベーション
/システム状態のスナップショット等)
△(サービスの起動/終了/
ステータス監視)

3. 自動起動したいサービスの確認

本来であればシステム構成設計時に確認できているはずですが、今回は現在起動しているサービスから確認してみます。systemctlコマンドを利用しても良いのですが、今回はnetstatコマンドで利用しているポート番号から調べる事にしてみました。

 $ sudo netstat -tanp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1353/master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      30325/nginx: master
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      30001/php-fpm: mast
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30325/nginx: master
tcp        0      0 0.0.0.0:2022            0.0.0.0:*               LISTEN      1184/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1353/master
tcp6       0      0 :::3306                 :::*                    LISTEN      26620/mysqld
tcp6       0      0 :::2022                 :::*                    LISTEN      1184/sshd

この結果からnginx,php-fpm,sshd,mysqldがサーバ起動時に自動で起動できれば良さそうな事が確認できました。

4. Systemdの自動起動設定

Systemdで管理しているサービスの自動起動を有効にするには、systemctl enableを利用する。nginxの場合は以下のコマンドを入力します。

 $ sudo systemctl enable nginx

自動起動を無効にする場合は、以下の様になります。

 $ sudo systemctl disable nginx

SysVinitで管理しているサービスの自動起動を有効にするには、chkconfigを利用します。 私の環境ではMySQLについてはsystemdではなくSysVinitによる管理です。systemctlコマンドから有効にできましたが、chkconfigコマンドにリダイレクトされた為、chkconifgから設定状況を確認しました。

$ sudo systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
$ sudo chkconfig --list mysqld
Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.
      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.
mysqld             0:off    1:off    2:on    3:on    4:on    5:on    6:off