V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
endlesslove
V2EX  ›  NGINX

nginx 无法停止

  •  
  •   endlesslove · Apr 25, 2020 · 5795 views
    This topic created in 2205 days ago, the information mentioned may be changed or developed.

    nginx -s quit nginx: [error] invalid PID number "" in "/var/run/nginx.pid"

    请教这是怎么一回事?

    30 replies    2020-04-26 15:07:17 +08:00
    unoxunoy
        1
    unoxunoy  
       Apr 25, 2020 via iPhone   ❤️ 1
    用 ps 查询 nginx 的 pid 号,再将 pid 号写到提示的.pid 文件中;或者查到 pid 号后直接 kill
    BrettD
        2
    BrettD  
       Apr 25, 2020 via iPhone
    字面意思是从 /var/run/nginx.pid 这个文件读取 nginx 的 PID 读到的是空白的
    dot2017
        3
    dot2017  
       Apr 25, 2020
    我一般直接 killall nginx……
    airyland
        4
    airyland  
       Apr 25, 2020 via iPhone
    善用搜索引擎
    endlesslove
        5
    endlesslove  
    OP
       Apr 25, 2020
    @unoxunoy vi /var/run/nginx.pid 这个文件改如何写,我查询到 15480
    gesse
        6
    gesse  
       Apr 25, 2020
    你是不是系统里有多个 nginx ?
    Guys
        7
    Guys  
       Apr 25, 2020   ❤️ 1
    @endlesslove pid 文件是记录 nginx 启动的进程号的,你查到进程号了,只须 kill -9 15480
    gesse
        8
    gesse  
       Apr 25, 2020
    package manager(如 apt-get install) 安装里一个, 又用编译等方法安装了一个?
    endlesslove
        9
    endlesslove  
    OP
       Apr 25, 2020
    @gesse 我没有编译安装过,只有 apt-get install 一个
    endlesslove
        10
    endlesslove  
    OP
       Apr 25, 2020
    ps -ax | grep nginx

    查看了有一个 master process 和 nginx: worker process

    是否是这两个东西重叠了,请教大家帮助!
    WuMengDi
        11
    WuMengDi  
       Apr 25, 2020
    1,两个 nginx 冲突了,
    WuMengDi
        12
    WuMengDi  
       Apr 25, 2020
    @WuMengDi 2,nginx 压根就没起来
    endlesslove
        13
    endlesslove  
    OP
       Apr 25, 2020
    cat /lib/systemd/system/nginx.service
    [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
    root@localhost:~# cat /etc/systemd/system/multi-user.target.wants/nginx.service
    [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

    请教大家,着否这里需要设置过才能关机?
    PbCopy111
        14
    PbCopy111  
       Apr 25, 2020
    @endlesslove 我有个小白问题啊。。为啥不用 systemctl stop nginx 来停止呢?
    endlesslove
        15
    endlesslove  
    OP
       Apr 25, 2020
    @PbCopy111 nginx -s quit nginx: [error] invalid PID number "" in "/var/run/nginx.pid" 返回的就是这样!
    endlesslove
        16
    endlesslove  
    OP
       Apr 25, 2020
    ps -ef | grep nginx
    显示依然在运行,不解,新手需要帮助
    cocowind
        17
    cocowind  
       Apr 25, 2020
    直接 kill 掉....我之前不知不觉起了十几个.
    win 平台
    movieatravelove
        18
    movieatravelove  
       Apr 25, 2020 via Android
    kill -9 pid 就完事了
    1daydayde
        19
    1daydayde  
       Apr 25, 2020
    1 楼正解。
    也不知道是 nginx 的 bug 还是被误删了,ps 查到 pid 再 echo 到那个文件里就可以了。
    PbCopy111
        20
    PbCopy111  
       Apr 25, 2020
    ```
    mkdir /etc/systemd/system/nginx.service.d
    printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" \
    > /etc/systemd/system/nginx.service.d/override.conf
    systemctl daemon-reload
    ```

    ```systemctl restart nginx```
    also24
        21
    also24  
       Apr 25, 2020
    两件事:
    1 、 现在先使用 ps -aux | grep nginx 找到 nginx master 的 PID,然后手动 kill 掉。
    这一步也可以使用 1 楼的方法,将 pid 直接写进 /var/run/nginx.pid 文件。

    2 、 检查你的 /var/run/nginx.pid 文件的权限,看 nginx 的启动用户是否有权限写入。
    MilkShake
        22
    MilkShake  
       Apr 25, 2020
    killall
    learningman
        23
    learningman  
       Apr 25, 2020
    @PbCopy111 不一定写了 systemd 的配置
    nicebird
        24
    nicebird  
       Apr 25, 2020
    就是没 pid 文件呗
    sazima
        25
    sazima  
       Apr 25, 2020
    pkill nginx
    androidkily
        26
    androidkily  
       Apr 26, 2020 via Android
    改个 pid,或者手动创建
    Tinyang
        27
    Tinyang  
       Apr 26, 2020
    我在 centos 7 也遇到过,我是直接删 nginx.pid, 然后 kill 的
    brader
        28
    brader  
       Apr 26, 2020
    你先看下 pid 文件里是什么内容,cat /var/run/nginx.pid
    很有可能是这种情况,比如,pid 不存在于那个文件,或者 pid 文件里面存的 pid 是这样的:12345%,
    他多了一个%号,然后命令就出错了
    Alucns
        29
    Alucns  
       Apr 26, 2020
    killall nginx
    winzkh
        30
    winzkh  
       Apr 26, 2020 via iPad
    killall -9 nginx
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3085 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 102ms · UTC 11:05 · PVG 19:05 · LAX 04:05 · JFK 07:05
    ♥ Do have faith in what you're doing.