基于shell脚本的软件包自动升级及软件自启功能
简介
因需要,在Centos8中使用shell脚本实现软件包的自动升级。自动升级流程为:①上传软件压缩包至指定路径下②重启系统,软件包自动升级完成
rc.local文件
自动升级和软件自启的核心就是rc.local
文件。rc.local
文件位于/etc/rc.d
。它是一个脚本,在系统启动过程的最后阶段被执行。这个文件通常用于在系统启动时自动执行命令或脚本。
我们先打开这个文件,然后向其中添加运行自动升级脚本的命令,使得自动升级脚本可以在系统启动时被执行。(脚本被放置在/etc/init.d/
下,命名为upgrade.sh
)
sh /etc/init.d/upgrade.sh
然后确保其有运行权限,若发现无法实现开机自动执行的功能时,可以给rc.local
和upgrade.sh
赋予相应的权限并重新尝试。
自动升级功能
为了直观的举例,现规定:
- 软件安装包的命名为:
InstallationPackage-20220411015810.tar.gz
- 软件安装包解压出来就是一个
/setup
目录,里面包含了软件的所有相关内容。 - 新软件安装包在上传时要上传到
/setup
路径下,以便更新。
下面介绍自动升级脚本的流程,它的本质就是检测指定目录下(/setup)是否有新的软件安装包,若有则进行升级:
- ①根据名字检查
/setup
下的安装包是否存在且唯一,若存在且唯一则开始升级过程 - ②删除
/
下的旧安装包,将新安装包移动至/
,若移动成功则 - ③删除旧软件及其相关内容所在的目录
/setup
- ④解压软件安装包,解压出新的软件目录
/setup
,并删除软件安装包 - ⑤进入
/setup
执行目录内部的相关升级脚本
软件自启功能
软件自启功能很简单,只要在脚本中加入后台启动相关进程的语句即可
脚本代码
#!/bin/bash
#chkconfig: 2345 81 96
#description upgrade and start
touch /upgrade_monitor.log
LOG_FILE=/upgrade_monitor.log
#日志记录函数
function log()
{
local t=$(date +"%F %X")
echo "[ $t ] $0 : $1 " >> ${LOG_FILE}
}
#启动进程,不包含在标准升级流程中,仅用于相关进程的开机自启
function start()
{
#设置环境变量,临时挂载硬盘等操作
...
#后台启动相关进程,如守护进程
cd /setup
./daemon &
log ">>>>>>>>>>>>>>>>>>>>>>> exit aods "
return 0
}
#软件包升级
function upgrade()
{
#如果在更新目录下有安装包,则进行升级,否则正常启动,在升级完成后将安装包移动至/
#安装目录/setup
#安装包名字InstallationPackage-*tar.gz
setup_num=$(ls -l /setup/ | grep -c InstallationPackage-)
log $setup_num
if [ $setup_num -eq 1 ]; then
log "find new upgrade file start upgrade"
log "cd /"
cd /
log "rm old InstallationPackage in /"
rm /InstallationPackage-* -fr
log "mv /setup/InstallationPackage- /"
mv /setup/InstallationPackage-* /
InstallationPackageIsVaild=$(ls -l / | grep -c InstallationPackage-)
if [ $InstallationPackageIsVaild -eq 1 ]; then
log "find new upgrade file in / "
log "start rm /setup* -fr /"
rm /setup* -fr
log "tar -zxvf /InstallationPackage-*"
tar -zxvf /InstallationPackage-*
log "rm /InstallationPackage-* -fr"
rm /InstallationPackage-* -fr
log "cd /setup/"
cd /setup/
log "sh /setup/upgrade_setup.sh"
sh /setup/upgrade_setup.sh
fi
fi
start
return 0
}
log ">>>>>>>>>>>>>>>>>>>>>>>> start aods !"
upgrade