V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
RobertYang
V2EX  ›  NGINX

Systemctl 配置 Nginx 自启动显示超时

  •  
  •   RobertYang · 2018-08-04 16:45:56 +08:00 · 6999 次点击
    这是一个创建于 2335 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    @hcymk2 不纠结了,上面也没什么重要的东西,重装了下,主要是上次腾讯云母机宕机重启,nginx 没起来博客挂了半天
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1749 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 16:35 · PVG 00:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.