docker-solo 自动升级脚本-最终
记得给脚本添加可执行权限: chmod +x solo.sh
- 特性:
- 检测 solo 版本是否有新版本;
- 可自动删除更新后的 solo、Lute 镜像包;
- 自动检测 solo 是否安装部署成功,不成功则再次 pull 镜像
- 检测 lute-http 是否正常运行
- 修复有 Lute 更新包更新后时往往因为 solo 进程占用 Lute 进程,原镜像无法删除
#!/bin/bash
# Solo docker 升级脚本&删除旧的镜像脚本
# Author:cuijianzhe
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
start_time=`date +'%Y-%m-%d %H:%M:%S'`
solo(){
echo "-----------------solo upgrading------------------------------"
docker pull b3log/solo
docker stop solo
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="solo" \
--env JDBC_PASSWORD="b3blogsolo" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
--rm \
b3log/solo --listen_port=8080 --server_scheme=https --lute_http=http://127.0.0.1:8249 --server_host=www.cjzshilong.cn --server_port=
}
#--------------------------删除无用镜像image包--------------------------#
del(){
num=`docker images |grep none |wc -l`
echo "当前存在无用镜像包$num 个."
for ((i=1;i<=$num;i++))
do
images=`docker images |grep none | awk '{print $3}'`
docker rmi $images
if [[ $? == 0 ]];
then
echo -e "------------------$end_time 删除镜像id:$images 成功-----------------------"
else
echo -e "-----------------$end_time 删除镜像id:$images 失败 -----------------------"
fi
done
}
#---------------------------lute安装脚本--------------------------------
lute(){
docker pull b3log/lute-http
docker stop solo
docker stop lute-http
docker rm lute-http
docker run --detach --name lute-http --network=host b3log/lute-http
}
solo_time(){
end_time=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "脚本运行所用时间为:"$((end_seconds-start_seconds))"s"
echo "开始时间为: $start_time ,结束时间为:$end_time"
echo " "
}
#----------------------------判断solo是否有新版本-------------------------------------
upgrade_solo(){
isUpgrad=$(docker pull b3log/solo|grep "Downloaded")
if [[ -z $isUpgrad ]]
then
echo $start_time :Detection solo version is the latest version
else
solo
fi
}
#---------------------------判断lute是否有新版本----------------------------------
upgrade_lute(){
isUpgrad=$(docker pull b3log/lute-http|grep "Downloaded")
if [[ -z $isUpgrad ]]
then
echo $start_time :Detection lute version is the latest version
else
lute
fi
}
#---------------------判断docker镜像是否正常运行---------------------------
Server_test(){
server=`docker ps | grep b3log/solo`
if [ -z "$server" ]; then #如果查询结果为空,则停留5秒继续pull镜像
sleep 5
echo '----------docker-solo状态异常,重新安装------------'
solo
fi
lute_http=` docker ps | grep lute-http`
if [ -z "$lute_http" ]; then
sleep 3
lute
fi
}
main(){
upgrade_lute
upgrade_solo
Server_test
solo_time
del
}
main
#--------------------------------------------------------------------------
- 定时任务:
00 03 * * * /shell/solo.sh >>/var/log/solo.log
1.1 版本
特性:自动升级 solo 博客版本,打印升级所用时间,是否报错等信息
定于每周三的早上 5 点准时升级 solo,有那么一段时间发现 pull 一个 solo 镜像用了好长时间,打算打印一下时间计算下 pull 一个镜像到底又做猛?
#!/bin/bash
#
# Solo docker 升级并且重启脚本
# 参考solo指南 https://hacpai.com/article/1492881378588
#
echo "-----------------升级前------------------------------------"
start_time=`date +'%Y-%m-%d %H:%M:%S'`
docker pull b3log/solo
docker stop solo
docker rm solo
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="xxxxxxxxxxx" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=www.cjzshilong.cn
if [[ $? == 0 ]];
then
echo -e ""$start_time 拉取镜像完成并且安装成功!!!""
else
echo -e "solo docker 升级有报错,请检查!!! "
fi
end_time=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "升级所用时间为:"$((end_seconds-start_seconds))"s"
echo "开始时间为: $start_time ,结束时间为:$end_time"
echo "----------------升级完毕!!!!-----------------------------"
下次升级看下打印的日志,安排一下啊,大哥,不想本地测试了!下周三的
1.2 版本
新增特性:自动删除下载的 docker images,因为每次升级,原有的 images 不会删除,升级后自动删除特性增加
#!/bin/bash
#
# Solo docker 升级脚本&删除旧的镜像脚本
#
echo "-----------------------------------------------------------"
echo "-----------------升级前------------------------------------"
start_time=`date +'%Y-%m-%d %H:%M:%S'`
docker pull b3log/solo
docker stop solo
docker rm solo
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="solo" \
--env JDBC_PASSWORD="b3blogsolo" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
--volume /dockerdata/solo/skins/:/opt/solo/skins/ \
--rm \
b3log/solo --listen_port=8080 --server_scheme=https --lute_http= --server_host=www.cjzshilong.cn --server_port=
if [[ $? == 0 ]];
then
echo -e ""$start_time 拉取镜像完成并且安装成功!!!""
else
echo -e "solo docker 升级有报错,请检查!!! "
fi
end_time=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "升级所用时间为:"$((end_seconds-start_seconds))"s"
echo "开始时间为: $start_time ,结束时间为:$end_time"
echo "----------------升级完毕!!!!-----------------------------"
echo " "
#安装lute_http
#docker pull b3log/lute-http
# docker run --detach --name lute-http --rm --network=host b3log/lute-http
sleep 5
#删除docker镜像脚本:
echo -e "##############################尝试删除旧镜像,如下############################################"
docker images
num=`docker images |grep b3log/solo|wc -l`
#echo $num
if [ "$num" -gt 1 ]; then
images=`docker images |grep b3log/solo | awk 'NR==2{print $3}'`
echo $images
docker rmi $images
docker images
echo -e "#############################$end_time 删除镜像id:$images ####################################"
else
echo -e "####################$end_time 没有旧的镜像可删除 ####################################"
fi
echo -e "
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于