9
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

systemdでApacheをオプション付きで起動する

はじめに

この記事では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に直接書く

httpd.service
- 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変数に書く

httpd.service
+ 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変数で指定されるファイルに書く

httpd.service
+ 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

環境変数用のファイルを別ファイルとして用意して、それを読み込む方法です。
環境変数用のファイルは次のように書きます。

myhttpd
HTTPD_CONF=myhttpd.conf

この方法では起動オプションだけでなく、Apacheのconfファイル内で使う他の環境変数も渡せるという利点があります。

欠点としてはserviceファイルだけでは設定内容が把握できないことでしょうか。

おわりに

個人的には方法3の環境変数用のファイルに書くのがスマートだと感じています。

本記事がサービス管理がinit.dからsystemdに変更されて困っていた人の助けになれば幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?