2016年9月9日金曜日

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) サービスの起動・停止・再起動を確認してみる。

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

# 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



0 件のコメント:

コメントを投稿