server-memo.net

CentOS7でのサービス(デーモン)の起動・停止方法

      2016/01/22

CentOS7からのサービス起動・停止について

CentOS7になり、各種サービスの起動・停止・自動起動設定の方法が、CentOS6以前で使えていた「/etc/init.d/httpd start」といった操作が出来なくなっています。

これは、CentOS7からは、各種サービスが「systemd」での管理に変更されているからです。(一部「systemd」に対応していないサービスに関しましては従来通りの方法で管理されています。)

ちなみに「service httpd start」といった「service」コマンドを使用した起動・停止等はまだ出来ますが、実際はこれから記述する「systemctl」コマンドにリダイレクトされます。

サービスの起動・停止方法

systemdを使用してのサービス起動・停止には「systemctl」コマンドを使用します。

書式

サービスの起動  systemctl start サービス名.service
サービスの停止  systemctl stop サービス名.service
サービスの再起動 systemctl restart サービス名.service

systemdではサービスでコントロールされる対象を、「ユニット」と言いその種類は複数あります。

サービスの起動・停止の場合は主に「.service」という種類のユニットを使用し、「サービス名.service」といったユニット名となり、それを指定するという書式になっています。

以下は、実際にhttpdを起動・停止・再起動させた時の作業ログとなります。

サービス起動

.serviceの部分は省略しても動作します。

# systemctl start httpd.service

serviceコマンドでの挙動

下記は「service」コマンドを使用した際の作業ログですが、「systemctl」コマンドにリダイレクトされていることが表示されています。

# service httpd start
Redirecting to /bin/systemctl start httpd.service

 サービス停止

# systemctl stop httpd.service

サービス再起動

# systemctl restart httpd.service

ステータスの確認

httpdが起動しているか、「systemctl」コマンドを使用して確認してみます。

書式

systemctl status サービス名.service

ステータスの確認

httpdを起動後のステータス状況を確認してみました。「Active: active (running)」と表示され、動作しているデーモンのステータスも表示されて、httpdが動作していることが確認できます。

httpd起動時

# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
 Main PID: 4349 (httpd)
   Status: "Total requests: 1; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─4349 /usr/sbin/httpd -DFOREGROUND
           ├─4350 /usr/sbin/httpd -DFOREGROUND
           ├─4351 /usr/sbin/httpd -DFOREGROUND
           ├─4352 /usr/sbin/httpd -DFOREGROUND
           ├─4353 /usr/sbin/httpd -DFOREGROUND
           └─4354 /usr/sbin/httpd -DFOREGROUND

12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.

httpd停止時

httpdを停止した後にステータスを確認すると、「Active: inactive (dead)」と表示され、停止していることが確認できます。

# systemctl status httpd
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: inactive (dead)

12月 05 13:24:54 localhost.localdomain systemd[1]: Stopped The Apache HTTP Server.
12月 05 13:27:59 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 13:27:59 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 13:32:06 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 13:32:24 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 13:32:34 localhost.localdomain systemd[1]: Stopping The Apache HTTP Server...
12月 05 13:32:35 localhost.localdomain systemd[1]: Stopped The Apache HTTP Server.
12月 05 13:32:36 localhost.localdomain systemd[1]: Stopped The Apache HTTP Server.
12月 05 13:32:37 localhost.localdomain systemd[1]: Stopped The Apache HTTP Server.
12月 05 13:36:44 localhost.localdomain systemd[1]: Stopped The Apache HTTP Server.

起動失敗の場合

「systemctl start」でサービスを起動する際、設定ファイルにミスがあったりして起動ができない場合等は、その旨のメッセージが表示されます。

起動失敗時のメッセージ

下記のログは「httpd」を起動させるの失敗した際のメッセージとなります。今回はメッセージを表示させるため、意図的にhttpd.confの設定を変更しています。

# systemctl start httpd
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
起動エラーの切り分け方法

メッセージにも表示されているのですが、「systemctl status httpd.service」と「journalctl -xn」コマンドを実行することで、原因を切り分けていきます。

ステータス確認

「systemctl status」コマンドでステータスを確認します。

「Active: failed」と表示されていて、起動に失敗していることが確認できます。下の方にエラー発生時にログが表示されているので、それを元にエラー発生原因を切り分けていきます。

「Syntax error on line 349 of /etc/httpd/conf/httpd.conf:」と表示されているので、httpd.confの349行目にエラーの原因があることが読み取れます。

# systemctl status httpd.service 
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: failed (Result: exit-code) since 金 2014-12-05 13:41:46 JST; 20s ago
  Process: 5413 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 5412 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 5412 (code=exited, status=1/FAILURE)

12月 05 13:41:46 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 13:41:46 localhost.localdomain httpd[5412]: AH00526: Syntax error on line 349 of /etc/httpd/conf/httpd.conf:
12月 05 13:41:46 localhost.localdomain httpd[5412]: Invalid command 'SEnableSendfile', perhaps misspelled or defined by...ation
12月 05 13:41:46 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
12月 05 13:41:46 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
12月 05 13:41:46 localhost.localdomain systemd[1]: Unit httpd.service entered failed state.
Hint: Some lines were ellipsized, use -l to show in full.
systemdログの確認

次にメッセージに表示されている「journalctl -xn」コマンドを使用してみます。

この「journalctl」コマンドは、「systemd」が出力したログを確認するためのコマンドとなるのですが、メッセージに表示されている通り実行すると、直近の10ログ分が表示されます。ログの多い環境では肝心のエラー発生時のログが表示されないことがありますので、「journalctl -xn -u サービス名.servcie」とかで、表示するログを絞ったりして対応してください。

下記は「journalctl -xn」コマンドを実行し、ログを表示させた結果となります。

# journalctl -xn
-- Logs begin at 木 2014-12-04 22:05:43 JST, end at 金 2014-12-05 13:50:01 JST. --
12月 05 13:41:46 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit httpd.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has begun starting up.
12月 05 13:41:46 localhost.localdomain httpd[5412]: AH00526: Syntax error on line 349 of /etc/httpd/conf/httpd.conf:
12月 05 13:41:46 localhost.localdomain httpd[5412]: Invalid command 'SEnableSendfile', perhaps misspelled or defined by a module
12月 05 13:41:46 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
12月 05 13:41:46 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has failed.
-- 
-- The result is failed.
12月 05 13:41:46 localhost.localdomain systemd[1]: Unit httpd.service entered failed state.
12月 05 13:50:01 localhost.localdomain systemd[1]: Created slice user-0.slice.
-- Subject: Unit user-0.slice has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit user-0.slice has finished starting up.
-- 
-- The start-up result is done.
12月 05 13:50:01 localhost.localdomain systemd[1]: Starting Session 34 of user root.
-- Subject: Unit session-34.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-34.scope has begun starting up.
12月 05 13:50:01 localhost.localdomain systemd[1]: Started Session 34 of user root.
-- Subject: Unit session-34.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-34.scope has finished starting up.
-- 
-- The start-up result is done.
12月 05 13:50:01 localhost.localdomain CROND[5502]: (root) CMD (/usr/lib64/sa/sa1 1 1)

以上。

 - CentOS7