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

Systemctl 配置 Nginx 自启动显示超时

  •  
  •   RobertYang · 133 天前 · 1819 次点击
    这是一个创建于 133 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条附言  ·  132 天前
    玄学问题,把相同的配置文件以及相同编译参数的 nginx 放在另外一台 ubuntu 服务器上面一点问题没有。估计是在 arch 上面 nginx 启动的太快了什么依赖的服务还没加载完成。
    28 回复  |  直到 2018-08-05 21:43:36 +08:00
        1
    wqyyy   133 天前 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   133 天前 via Android
    手动编译,手动写 systemctl ?
        3
    RobertYang   133 天前 via Android
    @MeteorCat 是的
        4
    RobertYang   133 天前 via Android
    @wqyyy 替换了你写的这个也启动不了,systemd 显示启动时间超过 1min30s,然后显示错误
        5
    cominghome   133 天前
    看看 nignx error-log 和 system message,或者直接启动 nginx 试试排除 nginx 配置原因,nginx.service 就那两行,不一定是 systemctl 的问题
        6
    Hardrain   133 天前
    journalctl -xe -u nginx.service 的输出?
        7
    wqyyy   133 天前 via Android
    @RobertYang 这样子的话我也不知道了,这个是从 Ubuntu 源里拆出来之后略作修改的。
        8
    RobertYang   133 天前 via Android
    @cominghome @Hardrain nginx 日志没有记录到错误,journalctl 还是提示启动超时的那两行
        10
    RobertYang   133 天前 via Android
    @iUnix 依然不工作,放弃了
        11
    iUnix   133 天前 via Android
    @RobertYang 手动 ok,我猜它启动时某些服务还没 ready,问题应该在 after 那里。
        12
    iUnix   133 天前 via Android
    @RobertYang 把启动顺序往后调看看是不是这个问题。
        13
    henryshen233   133 天前 via iPhone
    @iUnix 有些时候 ssh 上去就开了,默认开机不会打开,这种是什么原因呢
        14
    iUnix   133 天前 via Android
    @henryshen233 有没有日志? systemctl 或者 nginx
        15
    RobertYang   133 天前
    @iUnix systemctl 日志就是 nginx.service: Start operation timed out. Terminating. nginx 未记录到日志。
        16
    RobertYang   133 天前
    @iUnix 刚刚看错楼了,我等下调到 after=php-fpm 后面试试
        17
    RobertYang   133 天前 via Android
    @iUnix 调到 php-fpm 之后启动时间依然超过 1 分 30 秒然后报错
        18
    zjb861107   133 天前
    好像权限问题~我以前也遇到过
        19
    winterbells   133 天前 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   133 天前 via Android
    @winterbells 同样不行,有点玄学了
        21
    winterbells   133 天前 via Android
    @RobertYang 那就不知道了 Nginx 文件权限多少呢 chmod +x ?
        22
    RobertYang   133 天前 via Android
    @winterbells 能手动 systemctl start nginx 所以跟配置没关系吧
        23
    henryshen233   132 天前
    @iUnix 以前的事情啦,有些进程就是这样,不过我现在没弄了😄
        24
    Hardrain   132 天前
    @RobertYang 你的意思是"Nginx 开机后不能自动由 systemd 启动,但可以手动执行 systemctl start nginx.service 来启动"是吗?

    检查一下 /usr/lib/tmpfiles.d 目录,有无 nginx 相关的文件。
    可能 nginx 要在一个 tmpfs 的挂载点的某个子目录下创建 lock 或 pidfile,而这个子目录重启后没被创建。
    需要用 tmpfiles 解决。syntax 参考该目录下其他文件即可。
        25
    RobertYang   132 天前 via Android
    @Hardrain 应该不是这个原因,保存 pidfile 的目录早就已经创建在 /usr/local/nginx 中了
        26
    hcymk2   132 天前
    systemd.log_level=debug 再看下日志。
        28
    RobertYang   132 天前
    @alvinbone88 肯定不是这个原因,我都是这样写的`listen 80;`

    @hcymk2 不纠结了,上面也没什么重要的东西,重装了下,主要是上次腾讯云母机宕机重启,nginx 没起来博客挂了半天
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   747 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 21ms · UTC 22:50 · PVG 06:50 · LAX 14:50 · JFK 17:50
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1