1.通常の場合
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl start nginx.service
$ sudo systemctl enable nginx.service
こうやれば、次回からは起動時からnginxが起動してくれるはずだ。
2.どうしても起動しない場合がある
(1)エラーを調査
$ systemctl –failed
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: failed (Result: timeout) since Fri 2018-12-07 14:33:23 JST; 4min 44s ago
Process: 372 ExecStart=/usr/bin/nginx -g pid /run/nginx.pid; error_log stderr; (code=killed, signal=TERM)
Dec 07 14:31:53 kurafuto systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 07 14:33:23 kurafuto systemd[1]: nginx.service: Start operation timed out. Terminating.
Dec 07 14:33:23 kurafuto systemd[1]: nginx.service: Failed with result 'timeout'.
Dec 07 14:33:23 kurafuto systemd[1]: Failed to start A high performance web server and a reverse proxy server
どうもエラーログファイル(4行目)関連らしい。
(2)ログファイルの見直し
それではとエラーログを見直す
このときの、nginx.confファイルには、
error_log /var/log/nginx/error.log;
を設定していたので。
$ ls -al /var/log/nginx/
-rw-r----- 1 http log 102181 Dec 7 11:36 access.log
-rw-r----- 1 http log 22209 Dec 1 22:49 access.log.1.gz
-rw-r--r-- 1 root root 1847 Nov 24 23:24 access.log.2.gz
-rw-r--r-- 1 root root 0 Dec 7 14:23 error.log
グループとパーミッションが変だと考え、以下のように直してみた。
$ sudo chown http:log /var/log/nginx/*
$ sudo chmod 640 /var/log/nginx/*
$ ls -al /var/log/nginx/
-rw-r----- 1 http log 120555 Dec 7 14:57 access.log
-rw-r----- 1 http log 22209 Dec 1 22:49 access.log.1.gz
-rw-r----- 1 http log 1847 Nov 24 23:24 access.log.2.gz
-rw-r----- 1 http log 0 Dec 7 14:23 error.log
そして再起動
$ sudo shutdown -r now
再びログイン後
$ systemctl –failed
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
起動に失敗したサービスはないので、これで解決した(実は「と思った」だけだった。)
3.再度の見直し
うまく行ったと思ったのですが、再起動すると再び同じエラーに直面しました。やはり同じ症状です。
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: failed (Result: timeout) since Sun 2018-12-09 13:29:03 JST; 8min ago
Process: 408 ExecStart=/usr/bin/nginx -g pid /run/nginx.pid; error_log stderr; (code=killed, signal=TERM)
Dec 09 13:27:33 kurafuto systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 09 13:29:03 kurafuto systemd[1]: nginx.service: Start operation timed out. Terminating.
Dec 09 13:29:03 kurafuto systemd[1]: nginx.service: Failed with result 'timeout'.
Dec 09 13:29:03 kurafuto systemd[1]: Failed to start A high performance web server and a reverse proxy server.
ぐぐるとcentos 7: nginx Failed to read PID from file /run/nginx.pid: Invalid argumentが見つかったので、
$ sudo nano /usr/lib/systemd/system/nginx.service
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target network-online.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
PrivateDevices=yes
SyslogLevel=err
ExecStartPre=/usr/bin/rm -f /run/nginx.pid ← この位置にこの行を挿入
ExecStart=/usr/bin/nginx -g 'pid /run/nginx.pid error_log stderr;'
ExecReload=/usr/bin/nginx -s reload
KillMode=mixed
[Install]
WantedBy=multi-user.target
$ sudo shutdown -r now
$ systemctl –failed
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
今度こそOKと行きたいですが、これで暫く様子を見ます。
2018-12-13 追記
手動で起動できるのですが、サービスでは起動できる場合とできない場合があって問題の特定には至っていません。
今後の課題です。
4.再々の見直し
2018.12.20 追記
理解できていないのですが、種々試すうちに、 type= forking から simple に変更すると、nginx.pid ファイルも作成され無事に起動することができました。
forking だと 他の外部的サービスの起動を待って起動しようとするが、それがうまく行かないと Nginx は起動できない。これに対し simple にすると自分の判断で起動させようとするので、外部的要因に引きづられることなく起動する?
$ sudo nano /usr/lib/systemd/system/nginx.service
type=simple
【参考】
https://teratail.com/questions/92264
http://enakai00.hatenablog.com/entry/20130917/1379374797
その他の原因については、nginxを起動したら、起動に失敗しました。
コメント