Solo 通过脚本实现定时对软件更新和重启

Flower Unbeaten's Blog Nothing that has meaning is easy 本文由博客端 https://www.flowerunbeaten.top 主动推送

准备工作

1.安装 contab

依次执行以下命令

yum -y install vixie-cron
yum -y install crontabs

查看 crontab 相关命令

//启动服务
service crond start   
//关闭服务
service crond stop  
//重启服务
service crond restart
//重新载入配置   
service crond reload
//查看crontab服务状态  
service crond status  

设置开机自启

chkconfig --level 345 crond on

2.准备脚本文件

脚本文件地址:https://github.com/88250/solo/blob/master/scripts/docker-restart.sh

#!/bin/bash

#
# Solo docker 更新重启脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#

restart_solo(){
	docker stop solo
	docker rm solo
	docker run --detach --name solo --network=host \
	--env RUNTIME_DB="MYSQL" \
	--env JDBC_USERNAME="你自己的数据库名称" \
	--env JDBC_PASSWORD="你自己的数据库密码" \
	--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
	--env JDBC_URL="jdbc:mysql://localhost:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
       	b3log/solo --listen_port=9630 --server_scheme=https --server_host=www.flowerunbeaten.top
}

update_solo(){
  echo "Pulling Solo's image"
	isUpdate=$(docker pull b3log/solo | grep "Downloaded")
	if [[ -z $isUpdate ]]
	then
		echo "Solo is up to date"
	else
		restart_solo >> /dev/null 2>&1
		echo "Restarted Solo"
	fi
}

# 检查当前容器状态,如果状态正常进行升级操作,否则重新进行部署
update_and_test_service(){
	isCrash=$(docker ps | grep "b3log/solo")
	if [[ -z $isCrash ]]
	then
		echo "Solo's status is unexpected, trying to restart it"
		docker pull b3log/solo
		restart_solo
		sleep 5
		isSecondCrash=$(docker ps | grep "b3log/solo")
		if [[ -z $isSecondCrash ]]
		then
			echo "Failed to restart Solo, please check logs via 'docker logs solo'"
		fi
	else
		update_solo
	fi
}

update_and_test_service

注意:

--listen_port=9630 这里的端口号需要和你自己的Nginx反向代理的配置文件的端口号对应上,不然启动的时候会访问不了
--server_scheme=https 这里具体采用http还是https也是需要看你自己的Nginx反向代理配置文件是否配置了ssl
--server_host=www.flowerunbeaten.top 这里也需要和Nginx反向代理配置文件对应上

把脚本文件上传到服务器的一个文件夹下,上传之后需要添加该脚本的执行权限

chmod +x /home/cron.d/solo-docker-restart.sh

执行该脚本

./solo-docker-restart.sh

image.png

如图表示成功了

如果报错 bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory 的话有可能是该脚本的文件格式有问题。

解决办法

使用 vim 命令进入脚本文件

vim solo-docker-restart.sh

在文件底部输入:set ff 如果显示是 fileformat=dos 则输入:set fileformat=unix 后执行:x 或者:wq 保存修改

然后再次执行./solo-docker-restart.sh 看是否成功

3.编写一条定时任务

执行 crontab -e 命令,在编辑器中输入如下命令

0 0 * * * /home/cron.d/solo-docker-restart.sh(每天 0 时 0 分执行该命令)

image.png

然后保存退出即可

使用 crontab -l 查看定时任务是否存在

image.png

至此每天的 0 时 0 分就会执行定时任务通过脚本检查软件更新和重启了

contab 的文件格式

* * * * * command
分钟 小时 几号 月份 星期几 需要执行的命令
取值范围(0-59 之间的任何整数) 取值范围(0-23 之间的任何整数) 取值范围(1-31 之间的任何整数) 取值范围(1-12 之间的任何整数) 取值范围(0-7 之间的任何整数,这里的 0 或 7 代表星期天) 系统的命令或自己编写的命令
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1377 引用 • 9891 回帖 • 515 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    866 引用 • 921 回帖 • 97 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...