CentOS7やCentOS8のsystemdで、httpd.confを指定してApacheを起動する方法を紹介します。
動作確認環境
- CentOS Linux release 7.7.1908
- CentOS Linux release 8.0.1905
httpd.conf の代わりに myhttpd.conf を指定して起動
/etc/httpd/conf
ディレクトリ配下に、Apacheの起動時に使用したい設定ファイルmyhttpd.conf
があるものとします。
1. httpd.service を修正
Apacheのsystemdのユニット定義ファイル/usr/lib/systemd/system/httpd.service
を修正します。
修正前のhttpd.service
は以下となります。
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
修正後の`httpd.service`は以下となります。
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
`httpd.service`の差分は以下となります。
-ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
-ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
+ExecStart=/usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf $OPTIONS -DFOREGROUND
+ExecReload=/usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf $OPTIONS -k graceful
2. Apache を起動
以下のコマンドで修正したユニット定義ファイル(httpd.service
)でApacheを起動します。
systemctl start httpd
[root@CENTOS7 ~]# systemctl start httpd
[root@CENTOS7 ~]#
以下のコマンドで*Apache(httpd)*のプロセスを確認し、/etc/httpd/conf/myhttpd.conf
で起動されていることを確認します。
ps -ef | grep httpd
[root@CENTOS7 ~]# ps -ef | grep httpd
root 1332 1 0 22:20 ? 00:00:00 /usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf -DFOREGROUND
apache 1333 1332 0 22:20 ? 00:00:00 /usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf -DFOREGROUND
apache 1334 1332 0 22:20 ? 00:00:00 /usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf -DFOREGROUND
apache 1335 1332 0 22:20 ? 00:00:00 /usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf -DFOREGROUND
apache 1336 1332 0 22:20 ? 00:00:00 /usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf -DFOREGROUND
apache 1337 1332 0 22:20 ? 00:00:00 /usr/sbin/httpd -f /etc/httpd/conf/myhttpd.conf -DFOREGROUND
root 1341 1295 0 22:21 pts/0 00:00:00 grep --color=auto httpd
[root@CENTOS7 ~]#
その他
今回は/usr/lib/systemd/system/httpd.service
のExecStart
及びExecReload
に直接-f /etc/httpd/conf/myhttpd.conf
を追加しましたが、変数にすることもできます。
ユニット定義ファイルでの変数の使用方法は以下を参考にしてください。
以上