ソースファイルからのインストール(サービス化)

Ubuntu16.04LTSに対して、nginxをソースファイルからインストール後のサービス化やパーミッションの変更手順について説明します。

他のOSに関しては、https://www.nginx.com/resources/wiki/start/topics/examples/initscripts/からご確認下さい。

起動スクリプト

DAEMON変数に前頁以降でインストールしたnginxのバイナリーファイルのパスを指定して下さい。
PIDには、--pid-path=PATHで指定したpidファイルのパスを指定して下さい。

nginxファイル
#! /bin/sh
 
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO
 
PATH=/opt/bin:/opt/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
PID=/var/run/nginx/nginx.pid
 
test -x $DAEMON || exit 0
 
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi
 
set -e
 
case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile $PID \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile $PID \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                $PID --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                $PID --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
 
exit 0
								

作成したnginxファイルをSFTPなどのファイル転送を利用し、作業ユーザ(infra01)のホームディレクトリに転送します。

nginxファイルのコピーと権限
$ su -
$ cp /home/infra01/nginx /etc/init.d
$ chmod 775 /etc/init.d/nginx
$ exit				
						

nginxの起動スクリプトの動作検証を行います。


$ sudo /etc/init.d/nginx start
$ ps -aux | grep nginx
nginxのmainプロセスとworkerプロセスが起動している事を確認します。 
$ sudo /etc/init.d/nginx stop
nginxのmainプロセスとworkerプロセスが存在しない事を確認します。 
						

nginxの起動スクリプトをOSのデフォルトの実行レベルを付与します。


$ cd /etc/init.d
$ sudo /usr/sbin/update-rc.d -f nginx defaults
						

サーバーを再起動し、/etc/init.d/nginx及びupdate-rc.dのコマンドが有効になっている事を確認します。
ps-aux | grep nginx のコマンドによる確認とwebブラウザからサーバーにアクセスし、nginxのデフォルト頁が表示される事を確認します。

nginx.service

nginxをsystemctlから制御できるようにサービスファイルを定義します。

引用元:NGINX systemd service fileから引用

ファイル内の各種パスは./configureで指定したパスまたはデフォルト値を指定します。

nginx.serviceファイル
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
								

SFTPなどのファイル転送を利用し、作業用ユーザ(infra01)のホームディレクトリに転送します。

nginx.serviceファイルのコピー
$sudo cp /home/infra01/nginx.service /lib/systemd/system
						

パーミッションの変更

root権限でインストールしたnginxのリソース一式のオーナーとグループは、rootになっています。
以下の内容をご確認の上インストールしたnginxのオーナー及びグループをnginxにして下さい。

※.上記ディレクトリはapt-getを利用した場合のディレクトリで表記しています。./configureで指定した各パスに置き換えて確認して下さい。