自動起動・サービスの起動・停止 (systemdコマンド) [CentOS 7]

2017-01-18

CentOS 7のサービスの起動・停止・自動起動について

CentOS 7から自動起動・解除などの設定は、「systemd」に変更されましたので、その設定手順などまとめました

自動起動設定・解除

自動起動の設定は、chkconfigでは、「chkconfig サービス名 on」でしたが、systemctlコマンド使用すると、「systemctl enable サービス名.service」となります

自動起動の解除は、、chkconfigでは、「chkconfig サービス名 off」でしたが、systemctlコマンド使用すると、「systemctl disable サービス名.service」となります

また、サービス名.serviceのserviceを省略しても大丈夫です

# 自動起動の設定
$ sudo systemctl disable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

$ sudo systemctl disable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

# 自動起動の解除
$ sudo systemctl disable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

$ sudo systemctl disable httpd
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

自動起動一覧表示

自動起動の一覧表示は、chkconfigでは、「chkconfig -list」でしたが、systemctlコマンド使用すると
「 systemctl list-unit-files -t service」となります

$ systemctl list-unit-files -t service
UNIT FILE STATE
arp-ethers.service disabled
auditd.service enabled
autovt@.service disabled
blk-availability.service disabled
brandbot.service static
chrony-wait.service disabled
chronyd.service enabled
console-getty.service disabled
console-shell.service disabled
cpupower.service disabled
crond.service enabled
dbus-org.freedesktop.hostname1.service static
dbus-org.freedesktop.locale1.service static
dbus-org.freedesktop.login1.service static
dbus-org.freedesktop.machine1.service static
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service enabled
dbus-org.freedesktop.timedate1.service static
dbus.service static

「STATE」部分の表示されている、状態の意味は以下となります

ステータス(STATE)の意味
表示 設定状況
enable 自動起動設定有効
disable 自動起動設定無効
static 単体では自動起動できないサービス
特定のサービスの自動起動設定の確認

特定サービスの自動起動の設定確認するには、chkconfigでは、「chkconfig –list サービス名」, 「chkconfig –list | grep サービス名」などで表示していましたが、systemctlコマンドでは、「systemctl is-enabled サービス名.service」又は「systemctl list-unit-files | grep サービス名」で確認できます

$ systemctl is-enabled httpd.service
enabled

$ systemctl is-enabled httpd
enabled

$ systemctl list-unit-files | grep httpd
enabled

サービス起動

CentOS 6では、サービスの起動は「/etc/init.d/サービス名 start」, 「service サービス名 start」で起動していましたが、systemctlコマンドでは「systemctl start サービス名」となります

systemctlコマンドだと起動しても何も表示されませんので、psコマンドなどで起動しているか確認したほうが良さそうです

$ sudo systemctl start httpd
$ ps -ef|grep httpd
root 1152 1 0 14:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2756 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2757 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2758 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2759 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2760 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 2765 2670 0 15:12 pts/0 00:00:00 grep --color=auto httpd

サービス起動 失敗時

失敗した場合は、以下のようにエラーが表示されますの「systemctl status サービス名」でエラー内容を確認します。「journalctl -xn」コマンドで詳細を確認します
サービスのエラーログの場所がわかれば、そちらのログファイルでも確認できるかと思われます

#起動失敗時
$ sudo systemctl restart httpd
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: failed (Result: exit-code) since 木 2015-06-11 15:14:07 JST; 1min 43s ago
Process: 2791 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 2739 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Process: 2789 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 2789 (code=exited, status=1/FAILURE)

6月 11 15:14:07 cent7-localhost systemd[1]: Starting The Apache HTTP Server...
6月 11 15:14:07 cent7-localhost httpd[2789]: AH00526: Syntax error on line 348 of /etc/ht...f:
6月 11 15:14:07 cent7-localhost httpd[2789]: parameter must be 'on' or 'off'
6月 11 15:14:07 cent7-localhost systemd[1]: httpd.service: main process exited, code=exit...RE
6月 11 15:14:07 cent7-localhost kill[2791]: kill: cannot find process ""
6月 11 15:14:07 cent7-localhost systemd[1]: httpd.service: control process exited, code=e...=1
6月 11 15:14:07 cent7-localhost systemd[1]: Failed to start The Apache HTTP Server.
6月 11 15:14:07 cent7-localhost systemd[1]: Unit httpd.service entered failed state.
Hint: Some lines were ellipsized, use -l to show in full.

$ sudo journalctl -xn
-- Logs begin at 木 2015-06-11 14:39:02 JST, end at 木 2015-06-11 15:14:07 JST. --
6月 11 15:13:54 cent7-dti systemd[1]: Started The Apache HTTP Server.
-- Subject: Unit httpd.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

### 省略 ###

-- Unit httpd.service has begun starting up.
6月 11 15:14:07 cent7-dti httpd[2789]: AH00526: Syntax error on line 348 of /etc/httpd/conf/httpd.conf:
6月 11 15:14:07 cent7-dti httpd[2789]: parameter must be 'on' or 'off'
6月 11 15:14:07 cent7-dti systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
6月 11 15:14:07 cent7-dti kill[2791]: kill: cannot find process ""
6月 11 15:14:07 cent7-dti systemd[1]: httpd.service: control process exited, code=exited status=1
6月 11 15:14:07 cent7-dti systemd[1]: Failed to start The Apache HTTP Server.

この場合のエラー原因は、/etc/httpd/conf/httpd.conf の348行目が原因ですので記述ミスを確認すれば大丈夫かと思います

サービス停止

CentOS 6では、サービスの起動は「/etc/init.d/サービス名 stop」, 「service サービス名 stop」で起動していましたが、systemctlコマンドでは「systemctl stop サービス名」となります

systemctlコマンドだと起動しても何も表示されませんので、psコマンドなどで起動しているか確認したほうが良さそうです

$ sudo systemctl stop httpd.service
$ ps -ef | grep httpd | grep -v grep

サービス再起動

CentOS 6では、サービスの起動は「/etc/init.d/サービス名 restart」, 「service サービス名 restart」で起動していましたが、systemctlコマンドでは「systemctl restart サービス名」となります

systemctlコマンドだと起動しても何も表示されませんので、psコマンドなどで起動しているか確認したほうが良さそうです

$ sudo systemctl restart httpd
$ ps -ef|grep httpd
root 1152 1 0 14:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2756 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2757 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2758 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2759 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2760 1152 0 15:12 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 2765 2670 0 15:12 pts/0 00:00:00 grep --color=auto httpd

スポンサーリンク

LinuxCentOS 7

Posted by admin