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)
以上。
コメント