nginx 启动后自动把pid文件目录删除掉了

nginx.conf 文件中 pid 指定了绝对路径:

/var/run/nginx/nginx.pid

/usr/lib/systemd/system/nginx.service 文件内容如下

[Unit]
Description=nginx - high performance web server 
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reopen
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

pid 文件都是指向的同一个位置。

但是在使用 systemctl 命令启动 nginx 的第一次是正常的,但是如果终止 nginx 进程,再重新启动,就会提示打开 pid 文件失败,(其实 /var/run/nginx 这个目录都没了,应该是被 nginx 删除了,不知道是怎么回事。 )
图片描述

阅读 8.1k
2 个回答

附上正确的配置文件

[Unit]
Description=nginx - high performance web server 
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStartPost=/bin/sleep 0.1
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reopen
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

关键在于 ExecStartPost=/bin/sleep 0.1

新手上路,请多包涵

/var/run 这个是开机自动清空的,如果你不是yum(apt)模式安装的nginx,他不会生成相应位置的pid。具体调哪里能生成我不知道,我是挪动到/tmp下了,如有大神能告知源码安装后怎么能根据配置文件中内容生成pid 不胜感激

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题