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=/usr/local/nginx/logs/nginx.pid
PrivateDevices=yes
SyslogLevel=err
ExecStart=/usr/local/nginx/sbin/nginx -g 'pid /usr/local/nginx/logs/nginx.pid; error_log stderr;'
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillMode=mixed
[Install]
WantedBy=multi-user.target
开机后 Nginx 没有正确启动
$ sudo systemctl status nginx
* 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 Sat 2018-08-04 16:26:14 CST; 10s ago
Aug 04 16:24:44 isthnew systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 04 16:26:14 isthnew systemd[1]: nginx.service: Start operation timed out. Terminating.
Aug 04 16:26:14 isthnew systemd[1]: nginx.service: Failed with result 'timeout'.
Aug 04 16:26:14 isthnew systemd[1]: Failed to start A high performance web server and a reverse proxy server.
系统是 Arch,nginx 版本 1.15.2,貌似很早之前就出现过了,但是没注意,开机后使用 sudo systemctl start nginx
来启动 nginx 一问题都没有。
1
wqyyy 2018-08-04 19:24:43 +08:00 via Android
仅作对比:
``` [Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;' ExecStart=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;' ExecReload=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reload ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /usr/local/nginx/logs/nginx.pid TimeoutStopSec=5 KillMode=mixed [Install] WantedBy=multi-user.target ``` |
2
MeteorCat 2018-08-04 19:27:11 +08:00 via Android
手动编译,手动写 systemctl ?
|
3
RobertYang OP @MeteorCat 是的
|
4
RobertYang OP @wqyyy 替换了你写的这个也启动不了,systemd 显示启动时间超过 1min30s,然后显示错误
|
5
cominghome 2018-08-04 20:58:37 +08:00
看看 nignx error-log 和 system message,或者直接启动 nginx 试试排除 nginx 配置原因,nginx.service 就那两行,不一定是 systemctl 的问题
|
6
Hardrain 2018-08-04 20:59:29 +08:00
journalctl -xe -u nginx.service 的输出?
|
7
wqyyy 2018-08-04 21:02:36 +08:00 via Android
@RobertYang 这样子的话我也不知道了,这个是从 Ubuntu 源里拆出来之后略作修改的。
|
8
RobertYang OP @cominghome @Hardrain nginx 日志没有记录到错误,journalctl 还是提示启动超时的那两行
|
9
iUnix 2018-08-04 21:58:03 +08:00 via Android
|
10
RobertYang OP @iUnix 依然不工作,放弃了
|
11
iUnix 2018-08-04 23:24:04 +08:00 via Android
@RobertYang 手动 ok,我猜它启动时某些服务还没 ready,问题应该在 after 那里。
|
12
iUnix 2018-08-04 23:25:54 +08:00 via Android
@RobertYang 把启动顺序往后调看看是不是这个问题。
|
13
henryshen233 2018-08-04 23:27:09 +08:00 via iPhone
@iUnix 有些时候 ssh 上去就开了,默认开机不会打开,这种是什么原因呢
|
14
iUnix 2018-08-04 23:29:54 +08:00 via Android
@henryshen233 有没有日志? systemctl 或者 nginx
|
15
RobertYang OP @iUnix systemctl 日志就是 nginx.service: Start operation timed out. Terminating. nginx 未记录到日志。
|
16
RobertYang OP @iUnix 刚刚看错楼了,我等下调到 after=php-fpm 后面试试
|
17
RobertYang OP @iUnix 调到 php-fpm 之后启动时间依然超过 1 分 30 秒然后报错
|
18
zjb861107 2018-08-05 00:29:03 +08:00
好像权限问题~我以前也遇到过
|
19
winterbells 2018-08-05 00:56:35 +08:00 via Android
```
[Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target ``` Nginx 默认的文件 Nginx 是手动编译的,用这个在 CentOS 和 Ubuntu 上都正常启动 |
20
RobertYang OP @winterbells 同样不行,有点玄学了
|
21
winterbells 2018-08-05 01:19:25 +08:00 via Android
@RobertYang 那就不知道了 Nginx 文件权限多少呢 chmod +x ?
|
22
RobertYang OP @winterbells 能手动 systemctl start nginx 所以跟配置没关系吧
|
23
henryshen233 2018-08-05 08:49:53 +08:00
@iUnix 以前的事情啦,有些进程就是这样,不过我现在没弄了😄
|
24
Hardrain 2018-08-05 09:46:38 +08:00
@RobertYang 你的意思是"Nginx 开机后不能自动由 systemd 启动,但可以手动执行 systemctl start nginx.service 来启动"是吗?
检查一下 /usr/lib/tmpfiles.d 目录,有无 nginx 相关的文件。 可能 nginx 要在一个 tmpfs 的挂载点的某个子目录下创建 lock 或 pidfile,而这个子目录重启后没被创建。 需要用 tmpfiles 解决。syntax 参考该目录下其他文件即可。 |
25
RobertYang OP @Hardrain 应该不是这个原因,保存 pidfile 的目录早就已经创建在 /usr/local/nginx 中了
|
26
hcymk2 2018-08-05 15:25:33 +08:00
systemd.log_level=debug 再看下日志。
|
27
alvinbone88 2018-08-05 16:35:10 +08:00
|
28
RobertYang OP @alvinbone88 肯定不是这个原因,我都是这样写的`listen 80;`
@hcymk2 不纠结了,上面也没什么重要的东西,重装了下,主要是上次腾讯云母机宕机重启,nginx 没起来博客挂了半天 |