はじめに
この記事ではCentOS7系で採用されているsystemdでオプションを指定してApacheを起動する方法を紹介します。
systemdとは
CentOS 7系からサービスの管理方法がinit.dからsystemdに変更されました。
具体的な変更内容は次の記事が参考になりました。
systemdのserviceファイルについて
ApacheのデフォルトのserviceファイルはCentOS7.3では次の場所に格納されています。
- /usr/lib/systemd/system/httpd.service
デフォルトの設定を変更したくない場合には、次の記事を参考に別のserviceファイルを定義するのもよいです。
実行環境
- OS : CentOS 7.3
- Apache : v2.4.23(Fedra Core25のRPMがベース)
Apache v2.4.23の起動オプション
[root@localhost ~]# httpd -h
Usage: httpd [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed vhost settings
-t -D DUMP_RUN_CFG : show parsed run settings
-S : a synonym for -t -D DUMP_VHOSTS -D DUMP_RUN_CFG
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t -D DUMP_INCLUDES: show all included configuration files
-t : run syntax check for config files
-T : start without DocumentRoot(s) check
-X : debug mode (only one worker, do not detach)
systemdでApacheをオプション付きで起動する方法
私が実験した範囲で3つ方法があるので、お好みの方法を選択ください。
今回の記事ではConfigFile指定のオプション(-f)を例にしていますが、他のオプションでも適用できると思います。
ここではConfigFileをmyhttpd.confとしているので、自分の環境に合わせて適宜読み替えてください。
なお、ConfigFileの指定はフルパスなのでお気を付け下さい。
方法1.ExecStart/ExecReloadに直接書く
- ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
- ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
+ ExecStart=/usr/sbin/httpd -f myhttpd.conf $OPTIONS -DFOREGROUND
+ ExecReload=/usr/sbin/httpd -f myhttpd.conf $OPTIONS -k graceful
単純にExecStart/ExecReloadに追記するだけです。
この方法の欠点はオプションが増えてきたときに、ExecStartに書く内容が長くなりコードの見通しが悪くなることです。
方法2.serviceファイルのEnvironment変数に書く
+ Environment=HTTPD_CONF=myhttpd.conf
- ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
- ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
+ ExecStart=/usr/sbin/httpd -f ${HTTPD_CONF} $OPTIONS -DFOREGROUND
+ ExecReload=/usr/sbin/httpd -f ${HTTPD_CONF} $OPTIONS -k graceful
オプションに指定する値をEnvironment変数に定義し、それを使用します。
この方法の注意点は、変数を中括弧({})で囲む必要があることです。
中括弧で囲まないと、変数が展開されず、文字列そのままで解釈されます。
この方法の欠点は変数が増えるとserviceファイルの行数が増えて、コードの見通しが悪くなることです。
方法3.serviceファイルのEnvironmentFile変数で指定されるファイルに書く
+ EnvironmentFile=/etc/sysconfig/myhttpd
- ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
- ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
+ ExecStart=/usr/sbin/httpd -f ${HTTPD_CONF} $OPTIONS -DFOREGROUND
+ ExecReload=/usr/sbin/httpd -f ${HTTPD_CONF} $OPTIONS -k graceful
環境変数用のファイルを別ファイルとして用意して、それを読み込む方法です。
環境変数用のファイルは次のように書きます。
HTTPD_CONF=myhttpd.conf
この方法では起動オプションだけでなく、Apacheのconfファイル内で使う他の環境変数も渡せるという利点があります。
欠点としてはserviceファイルだけでは設定内容が把握できないことでしょうか。
おわりに
個人的には方法3の環境変数用のファイルに書くのがスマートだと感じています。
本記事がサービス管理がinit.dからsystemdに変更されて困っていた人の助けになれば幸いです。