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