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

nginx 无法停止

  •  
  •   endlesslove · 2020-04-25 12:40:14 +08:00 · 5174 次点击
    这是一个创建于 1705 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    请教这是怎么一回事?

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

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

    是否是这两个东西重叠了,请教大家帮助!
    WuMengDi
        11
    WuMengDi  
       2020-04-25 13:46:13 +08:00
    1,两个 nginx 冲突了,
    WuMengDi
        12
    WuMengDi  
       2020-04-25 13:46:24 +08:00
    @WuMengDi 2,nginx 压根就没起来
    endlesslove
        13
    endlesslove  
    OP
       2020-04-25 17:00:42 +08:00
    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  
       2020-04-25 17:02:16 +08:00
    @endlesslove 我有个小白问题啊。。为啥不用 systemctl stop nginx 来停止呢?
    endlesslove
        15
    endlesslove  
    OP
       2020-04-25 17:26:53 +08:00
    @PbCopy111 nginx -s quit nginx: [error] invalid PID number "" in "/var/run/nginx.pid" 返回的就是这样!
    endlesslove
        16
    endlesslove  
    OP
       2020-04-25 17:28:11 +08:00
    ps -ef | grep nginx
    显示依然在运行,不解,新手需要帮助
    sss495088732
        17
    sss495088732  
       2020-04-25 17:38:57 +08:00
    直接 kill 掉....我之前不知不觉起了十几个.
    win 平台
    movieatravelove
        18
    movieatravelove  
       2020-04-25 17:51:24 +08:00 via Android
    kill -9 pid 就完事了
    0312birdzhang
        19
    0312birdzhang  
       2020-04-25 18:05:49 +08:00
    1 楼正解。
    也不知道是 nginx 的 bug 还是被误删了,ps 查到 pid 再 echo 到那个文件里就可以了。
    PbCopy111
        20
    PbCopy111  
       2020-04-25 18:14:56 +08:00
    ```
    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  
       2020-04-25 18:18:11 +08:00
    两件事:
    1 、 现在先使用 ps -aux | grep nginx 找到 nginx master 的 PID,然后手动 kill 掉。
    这一步也可以使用 1 楼的方法,将 pid 直接写进 /var/run/nginx.pid 文件。

    2 、 检查你的 /var/run/nginx.pid 文件的权限,看 nginx 的启动用户是否有权限写入。
    aaa5838769
        22
    aaa5838769  
       2020-04-25 18:28:22 +08:00
    killall
    learningman
        23
    learningman  
       2020-04-25 20:02:09 +08:00
    @PbCopy111 不一定写了 systemd 的配置
    nicebird
        24
    nicebird  
       2020-04-25 20:20:15 +08:00
    就是没 pid 文件呗
    sazima
        25
    sazima  
       2020-04-25 20:30:24 +08:00
    pkill nginx
    androidkily
        26
    androidkily  
       2020-04-26 07:55:48 +08:00 via Android
    改个 pid,或者手动创建
    Tinyang
        27
    Tinyang  
       2020-04-26 08:39:30 +08:00
    我在 centos 7 也遇到过,我是直接删 nginx.pid, 然后 kill 的
    brader
        28
    brader  
       2020-04-26 10:16:48 +08:00
    你先看下 pid 文件里是什么内容,cat /var/run/nginx.pid
    很有可能是这种情况,比如,pid 不存在于那个文件,或者 pid 文件里面存的 pid 是这样的:12345%,
    他多了一个%号,然后命令就出错了
    Aluhao
        29
    Aluhao  
       2020-04-26 10:57:39 +08:00
    killall nginx
    winzkh
        30
    winzkh  
       2020-04-26 15:07:17 +08:00 via iPad
    killall -9 nginx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5780 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:44 · PVG 09:44 · LAX 17:44 · JFK 20:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.