准备工作
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
如图表示成功了
如果报错 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 分执行该命令)
然后保存退出即可
使用 crontab -l 查看定时任务是否存在
至此每天的 0 时 0 分就会执行定时任务通过脚本检查软件更新和重启了
contab 的文件格式
* | * | * | * | * | command |
---|---|---|---|---|---|
分钟 | 小时 | 几号 | 月份 | 星期几 | 需要执行的命令 |
取值范围(0-59 之间的任何整数) | 取值范围(0-23 之间的任何整数) | 取值范围(1-31 之间的任何整数) | 取值范围(1-12 之间的任何整数) | 取值范围(0-7 之间的任何整数,这里的 0 或 7 代表星期天) | 系统的命令或自己编写的命令 |
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于