今天在官网下载了nginx1的1.26.1版本,使用gpt的脚本想直接覆盖安装,脚本如下
bash
#!/bin/bash
# 设置变量
NGINX_VERSION="1.26.1"
TAR_FILE="nginx-$NGINX_VERSION.tar.gz"
SRC_DIR="nginx-$NGINX_VERSION"
# 检查是否存在tar包
if [ ! -f "$TAR_FILE" ]; then
echo "错误: 找不到 $TAR_FILE"
exit 1
fi
# 停止Nginx服务
echo "停止Nginx服务..."
sudo systemctl stop nginx
# 解压tar包
echo "解压 $TAR_FILE..."
tar -zxvf "$TAR_FILE"
# 进入源代码目录
cd "$SRC_DIR"
# 编译并安装Nginx
echo "编译并安装Nginx..."
./configure --sbin-path=/usr/sbin/nginx #指定安装的位置
make
sudo make install
# 启动Nginx服务
echo "启动Nginx服务..."
sudo systemctl start nginx
# 检查Nginx版本
echo "Nginx更新完成,当前版本:"
nginx -v
# 清理
cd ..
rm -rf "$SRC_DIR"
echo "更新过程完成。"
发现脚本执行完还是之前的nginx版本,无奈只能一步一步执行
先备份原来的ningx
mv /usr/sbin/nginx /usr/sbin/nginx.old
首先发现之前的nginx旧的进程没有杀死
随后使用
bash
ps aux | grep nginx
kill -9 进程号
杀死旧的nginx进程,想使用
bash
systemctl restart nginx.service
拉起服务,结果拉不起来
报错:Can't open PID file /var/run/nginx.pid (yet?) after start: No such...ctory
我一开始以为存在这个文件就好,从别的服务器上拉了nginx.pid到run目录,结果被进程删掉了,还是报一样的错误
后来查询发现
2021-03-17_nginx脚本启动 cannot open pid file-CSDN博客
原因是Nginx 启动时 PID 文件并未生成,导致文件无法读取
所以在nginx.service
文件中添加
bash
ExecStartPost=/bin/sleep 0.1
让进程等0.1s,生成文件
但是还是报错
最后是修改了nginx.service和nginx.conf中的nginx.pid的路径
bash
vi /你的nginx路径/conf/nginx.conf
发现是nginx.conf中的pid路径是默认不指定的,pid那句话是注释掉的,最后删除注释符,并且指定pid路径。修改完成后重新load一下配置文件。
bash
nginx -t
nginx -s reload
执行reload的时候报错
报错:nginx:[error]invalid PID number "" in "/run/nginx.pid"
根据我自己的情况对上面文章的内容进行了修改
bash
/usr/sbin/nginx -c /nginx的安装路径/nginx.conf
没有报错。进一步执行
bash
/usr/sbin/nginx -s reload
nginx的配置文件reload成功后,对systemctl进行reload
bash
systemctl daemon-reload
然后restart服务就OK啦
报错:nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so" version 1021005 instead of 1027000 in /usr/share/nginx/modules/mod-http-image-filter.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed
根据文章https://www.cnblogs.com/allay/p/17486284.html
原因:/usr/lib64/nginx/modules/ 内的组件包不兼容
推测是之前的组件包是旧的,有两个解决办法
(1)使用rpm包安装nginx的话是包里自带的,备份好旧的包之后就可以删除
(2)从新的安装位置复制过来(文章中的做法)
我使用方法1,解决了该报错