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 一问题都没有。
|      1wqyyy      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 ``` | 
|      2MeteorCat      2018-08-04 19:27:11 +08:00 via Android 手动编译,手动写 systemctl ? | 
|      3RobertYang OP @MeteorCat 是的 | 
|      4RobertYang OP @wqyyy 替换了你写的这个也启动不了,systemd 显示启动时间超过 1min30s,然后显示错误 | 
|  |      5cominghome      2018-08-04 20:58:37 +08:00 看看 nignx error-log 和 system message,或者直接启动 nginx 试试排除 nginx 配置原因,nginx.service 就那两行,不一定是 systemctl 的问题 | 
|  |      6Hardrain      2018-08-04 20:59:29 +08:00 journalctl -xe -u nginx.service 的输出? | 
|      7wqyyy      2018-08-04 21:02:36 +08:00 via Android @RobertYang 这样子的话我也不知道了,这个是从 Ubuntu 源里拆出来之后略作修改的。 | 
|      8RobertYang OP @cominghome  @Hardrain  nginx 日志没有记录到错误,journalctl 还是提示启动超时的那两行 | 
|      9iUnix      2018-08-04 21:58:03 +08:00 via Android | 
|      10RobertYang OP @iUnix 依然不工作,放弃了 | 
|      11iUnix      2018-08-04 23:24:04 +08:00 via Android @RobertYang 手动 ok,我猜它启动时某些服务还没 ready,问题应该在 after 那里。 | 
|      12iUnix      2018-08-04 23:25:54 +08:00 via Android @RobertYang 把启动顺序往后调看看是不是这个问题。 | 
|  |      13henryshen233      2018-08-04 23:27:09 +08:00 via iPhone @iUnix 有些时候 ssh 上去就开了,默认开机不会打开,这种是什么原因呢 | 
|      14iUnix      2018-08-04 23:29:54 +08:00 via Android @henryshen233 有没有日志? systemctl 或者 nginx | 
|      15RobertYang OP @iUnix systemctl 日志就是 nginx.service: Start operation timed out. Terminating.  nginx 未记录到日志。 | 
|      16RobertYang OP @iUnix 刚刚看错楼了,我等下调到 after=php-fpm 后面试试 | 
|      17RobertYang OP @iUnix 调到 php-fpm 之后启动时间依然超过 1 分 30 秒然后报错 | 
|      18edsion996      2018-08-05 00:29:03 +08:00 好像权限问题~我以前也遇到过 | 
|  |      19300      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 上都正常启动 | 
|      20RobertYang OP @winterbells 同样不行,有点玄学了 | 
|  |      21300      2018-08-05 01:19:25 +08:00 via Android @RobertYang 那就不知道了 Nginx 文件权限多少呢 chmod +x ? | 
|      22RobertYang OP @winterbells 能手动 systemctl start nginx 所以跟配置没关系吧 | 
|  |      23henryshen233      2018-08-05 08:49:53 +08:00 @iUnix 以前的事情啦,有些进程就是这样,不过我现在没弄了😄 | 
|  |      24Hardrain      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 参考该目录下其他文件即可。 | 
|      25RobertYang OP @Hardrain 应该不是这个原因,保存 pidfile 的目录早就已经创建在 /usr/local/nginx 中了 | 
|      26hcymk2      2018-08-05 15:25:33 +08:00 systemd.log_level=debug    再看下日志。 | 
|      27alvinbone88      2018-08-05 16:35:10 +08:00 | 
|      28RobertYang OP @alvinbone88 肯定不是这个原因,我都是这样写的`listen 80;` @hcymk2 不纠结了,上面也没什么重要的东西,重装了下,主要是上次腾讯云母机宕机重启,nginx 没起来博客挂了半天 |