CentOS 7.0 では systemctl を使う。

CentOS 7.0からサービスの管理が面倒になった。systemctl というコマンドを使う。従来のようにchkconfigで管理されるサービスと新しい systemd で管理されるサービスに分かれるようだ。

(1) chkconfig で確認してみる。

chkconfigコマンドでサービスの有効/無効を設定しようと実行してみても以下のものしか出ない。ほとんどのものがsystemdの管理下に移動させられたようだ。


# chkconfig --list
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
丁寧に「注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。SysV 設定のデータはネイティブな systemd の設定によって上書きされます。systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。特定のターゲットにおいて有効化されているサービスを確認するには 'systemctl list-dependencies [target]' を使用してください。」とのメッセージが出る。従来のものがSysVサービスということか。

(2) systemctl list-unit-files で確認してみる。

systemctl list-unit-files を実行してみると300以上のサービスが一覧された。httpd,sshd,tomcat,NetworkManagerなどのサービスが含まてていた。


# systemctl list-unit-files
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
・・・(※300個以上のサービスが並ぶ)
httpd,tomcatなどのサービスは、これまで馴れ親しんできたコマンド(service xxx start や chkconfig xxx on)では開始・停止、自動起動の設定などができなくなったということか。mysqld のみ従来どおりに、service mysqld restartなどで利用することになるのか。この辺りを確認しておきたい。SysVサービスは、/etc/rc.d/init.d 配下にスクリプトを置くが、systemdサービスは、/lib/systemd/system 配下に置かれる。

(3) /etc/rc.dと/lib/systemd/systemを確認してみる。


# cd /etc/rc.d
# ls
init.d rc.local rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
# ls rc0.d
K36mysqld K50netconsole K90network
# ls init.d
README mysqld network vboxadd-service
functions netconsole vboxadd vboxadd-x11

# cd /lib/systemd/system
# ls
・・・
httpd.service
tomcat.service
tomcat@.service
・・・

mysqldは /etc/rc.d にある。httpdtomcat は /lib/systemd/system 配下にある。tomcat@ は何だろう。

(4) サービスのステータスを確認してみる。

systemctl statusコマンドを試してみる。httpdtomcatのサービスはどうなっているのか。


# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
Active: active (running) since 2015-09-03 13:57:22 JST; 49min ago
Main PID: 4407 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4407 /usr/sbin/httpd -DFOREGROUND
├─4408 /usr/sbin/httpd -DFOREGROUND
├─4409 /usr/sbin/httpd -DFOREGROUND
├─4410 /usr/sbin/httpd -DFOREGROUND
├─4411 /usr/sbin/httpd -DFOREGROUND
└─4412 /usr/sbin/httpd -DFOREGROUND

9月 03 13:57:22 systemd[1]: Starting The Apache HTTP Server...
9月 03 13:57:22 httpd[4407]: AH00558: httpd: Could not reliably determine...ge
9月 03 13:57:22 systemd[1]: Started The Apache HTTP Server.

# systemctl status tomcat
tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled)
Active: active (running) since 2015-09-03 13:58:03 JST; 48min ago
Process: 4485 ExecStop=/usr/libexec/tomcat/server stop (code=exited, status=0/SUCCESS)
Main PID: 4517 (java)
CGroup: /system.slice/tomcat.service
└─4517 java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-...

9月 03 13:58:04 server[4517]: 9 03, 2015 1:58:04 午後 org.apache.catali...al
9月 03 13:58:04 server[4517]: 情報: サービス Catalina を起動します
9月 03 13:58:04 server[4517]: 9 03, 2015 1:58:04 午後 org.apache.catali...al
9月 03 13:58:04 server[4517]: 情報: Starting Servlet Engine: Apache Tom...54
9月 03 13:58:04 server[4517]: 9 03, 2015 1:58:04 午後 org.apache.coyote...rt

# systemctl status tomcat@
Failed to issue method call: Unit name tomcat@.service is not valid.

httpdtomcatは、VirtualBoxからCentOSを起動した時点でサービスが開始されている。このコマンドは、ログの一部も表示してくれる。tomcat@ は何なんだろう。

(5) サービスの起動・停止・再起動を確認してみる。

サービスを再起動してみる。mysqldとhttpdで試してみた。


# service mysqld restart
Restarting mysqld (via systemctl): [ OK ]
# service httpd restart
Redirecting to /bin/systemctl restart httpd.service

# systemctl start mysqld
# systemctl start httpd
# systemctl start httpd.service
# systemctl restart mysqld
# systemctl restart httpd
# systemctl restart httpd.service

service httpd restart でhttpdを再起動してくれているようだ。リダイレクトしたと出ている。ただ、systemctlはレスポンスの文字列が全くないので、成功したのか失敗したのか全然分からないな。都度、statusを確認してみる必要がありそう。

# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
Active: active (running) since 2015-09-03 15:03:40 JST; 13ms ago
Process: 6919 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Main PID: 6923 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
├─6923 /usr/sbin/httpd -DFOREGROUND
├─6925 /usr/sbin/httpd -DFOREGROUND
├─6926 /usr/sbin/httpd -DFOREGROUND
├─6927 /usr/sbin/httpd -DFOREGROUND
├─6928 /usr/sbin/httpd -DFOREGROUND
└─6929 /usr/sbin/httpd -DFOREGROUND
・・・
# systemctl restart mysqld
# systemctl status mysqld
mysqld.service - SYSV: MySQL database server.
Loaded: loaded (/etc/rc.d/init.d/mysqld)
Active: active (running) since 2015-09-03 15:03:44 JST; 1s ago
Process: 6942 ExecStop=/etc/rc.d/init.d/mysqld stop (code=exited, status=0/SUCCESS)
Process: 6973 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
Main PID: 7228 (mysqld)
CGroup: /system.slice/mysqld.service
├─7000 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mys...
└─7228 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/...
・・・
SysVのサービス(mysqldなど)も、systemdのサービス(httpd,tomcatなど)も同じように扱えることが分かった。ただし、実行後のステータスは都度確認した方がよさそうだ。これからは、systemctlのコマンドに馴染むようにしよう。

  • どちらも service xxx restart で再起動できる。
  • どちらも systemctl restart xxx で再起動できる。
  • どちらも systemctl status xxx でステータスを確認できる。

ちなみに、サービスの自動起動の設定は以下のようにenable/disableで行う。httpdの場合、サービス名は、"httpd"でも"httpd.service"でもいいようだ。


# systemctl enable httpd
# systemctl disable httpd