最近使用centos7.4编译安装的NGINX,重启服务器老是出现无法自启动,查看错误日志提示打开文件失败:
open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
于是手动创建了/var/run/nginx,测试启动正常,马上又重启服务器,启动以后NGINX日志还是未启动,日志还是报错:
open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
再次去查看/var/run/nginx目录又不存在了。
于是网上找了下资料,大部分的内容都是粘贴复制的,都是让修改nginx.conf文件,把
#pid logs/nginx.pid;去掉注释或者修改为一个自定义的目录。
试了下这个方法,会导致start nginx的时候,一直卡主不动,一直没找到原因,然后把pid logs/nginx.pid又注释掉,启动又正常了,怀疑可能是在编译的时候指定了--pid-path=/var/run/nginx/nginx.pid的原因。
于是想着每次重启服务器就会删除/var/run/nginx目录,那在启动nginx服务的时候加一个判断/var/run/nginx是否存在的条件,不存在创建就可以了。
找到/etc/init.d/nginx启动脚本的start()函数,在make_dirs后面加上[ -d /var/run/nginx ] || mkdir /var/run/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
[ -d /var/run/nginx ] || mkdir /var/run/nginx
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
再次重启服务器,nginx已经可以自启动。