技术解析

Systemctl 配置 Nginx 自启动显示超时
0
2021-05-19 18:33:10
idczone

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/sys大带宽服务器temd/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 一问题都没有。


仅作对比:
```
[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
```

手动编译,手动写 systemctl ?

是的

替换了你写的这个也启动不了,systemd 显示启动时间超过 1min30s,然后显示错误

看看 nignx error-log 和 system message,或者直接启动 nginx 试试排除 nginx 配置原因,nginx.service 就那两行,不一定是 systemctl 的问题

journalctl -xe -u nginx.service 的输出?

这样子的话我也不知道了,这个是从 Ubuntu 源里拆出来之后略作修改的。

nginx 日志没有记录到错误,journalctl 还是提示启动超时的那两行

https://askubuntu.com/questions/953920/systemctl-service-timed-out-during-start

依然不工作,放弃了

手动 ok,我猜它启动时某些服务还没 ready,问题应该在 after 那里。

把启动顺序往后调看看是不是这个问题。

有些时候 ssh 上去就开了,默认开机不会打开,这种是什么原因呢

有没有日志? systemctl 或者 nginx

systemctl 日志就是 nginx.service: Start operation timed out. Terminating. nginx 未记录到日志。

刚刚看错楼了,我等下调到 after=php-fpm 后面试试

调到 php-fpm 之后启动时间依然超过 1 分 30 秒然后报错

好像权限问题~我以前也遇到过

```
[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 上都正常启动

同样不行,有点玄学了

那就不知道了 Nginx 文件权限多少呢 chmod +x ?

能手动 systemctl start nginx 所以跟配置没关系吧

以前的事情啦,有些进程就是这样,不过我现在没弄了
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服