1.在脚本中运行docker
命令要在命令前加sudo
.
2.docker查看容器是否正在运行,正在运行返回1,没有返回0。
3.if和中括号[ ]
之间,中括号和里面的内容也要空格隔开。
4.声明变量时等号两边不能有空格示例:a=1
。
5.函数返回值用echo
返回可以直接用变量=$(函数名)
接收,如果用return 返回则存放在$?
中用变量=$?
接收
docker ps |grep -i 容器名或容器id -c
PID
其中容器名su-nacos
可以换成容器id
,用于查看容器是否正在运行。docker stats --format "{
{.PIDs}} " --no-stream su-nacos
3.用于查看上一个进程或函数的返回值$?
1.建议配置前把容器全部重命名为软件名,修改示例如下:
docker rename smysql mysql
2.新建一个.txt
文本文件,把下面的脚本复制到一个文件中。
3.在xshell
中使用which bash
命令查看bash
命令所在的文件夹,和脚本中的第一行/user/bin/bash
进行比较,相同就不变,不相同的话修改为查询到的路径。
4.修改脚本中第二行containerNames="nacos ssdb rabbit mysql minio "
数组中博主使用的容器名,改为你自己想要启动的容器名。
5.把文件后缀名改为.sh
,然后放入linux任意目录下,方便就行。
6.设置脚本文件的权限,示例:chmod +x docker.sh
7.在你存放脚本的目录下启动脚本,以后每天只需要做这一步就行了。
sh docker.sh
因为用$()
接收startContainer
函数的返回值返回值会报容器名: command not found
的错误(值时运行docker命令才会报错,但是不影响运行,其它正常),所以此处用startContainer $containerName &> /dev/null
,把startContainer
函数的返回值后台输出到/dev/null
文件夹内(为了控制台美观不输出太多字)。
0 代表docker中有该容器,且未启动。
1 代表docker中有该容器,但是已经启动了。
2 代表docker中没有该容器。
#! /user/bin/bash
containerNames="ssdb rabbit "
function GetContainerStatus(){
containerExist=$(sudo docker ps -a |grep -i $1 -c)
if [ $containerExist != 0 ] ;
then
pid=$(sudo docker stats --format "{
{.PIDs}}" --no-stream $1)
if [ $pid -eq 0 ];
then
return 0
else
return 1
fi
else
return 2
fi
}
function startContainer(){
sudo docker restart $1
}
for containerName in $containerNames
do
for((i=1; i<=3; i++))
do
$(GetContainerStatus $containerName)
statues=$?
if [ $statues -eq 1 ];
then
echo -e "\033[31m the container named $containerName is started \033[0m"
break
fi
if [ $statues -eq 2 ];
then
echo -e "\033[31m container which named $containerName is not exit \033[0m"
break
fi
if [ $statues -eq 0 ] ;
then
echo -e "\033[33m container $containerName is preparing to start ...... \033[0m"
startContainer $containerName &> /dev/null
$(GetContainerStatus $containerName)
varifyStatus=$?
if [ $varifyStatus -eq 1 ];
then
echo -e "\033[32m container $containerName started success \033[0m"
break
else
echo -e "\033[33m container $containerName retry start...... \033[0m"
$(startContainer $containerName)
fi
fi
done
done
和启动脚本类似,按照第二节的来就行
#! /user/bin/bash
containerNames="ssdb rabbit "
function GetContainerStatus(){
containerExist=$(sudo docker ps -a |grep -i $1 -c)
if [ $containerExist != 0 ] ;
then
pid=$(sudo docker stats --format "{
{.PIDs}}" --no-stream $1)
if [ $pid -eq 0 ];
then
return 0
else
return 1
fi
else
return 2
fi
}
function stopContainer(){
sudo docker stop $1
}
for containerName in $containerNames
do
for((i=1; i<=3; i++))
do
$(GetContainerStatus $containerName)
statues=$?
if [ $statues -eq 0 ];
then
echo -e "\033[31m the container named $containerName is stoped \033[0m"
break
fi
if [ $statues -eq 2 ];
then
echo -e "\033[31m container which named $containerName is not exit \033[0m"
break
fi
if [ $statues -eq 1 ] ;
then
echo -e "\033[33m container $containerName is preparing to stop...... \033[0m"
stopContainer $containerName &> /dev/null
$(GetContainerStatus $containerName)
varifyStatus=$?
if [ $varifyStatus -eq 0 ];
then
echo -e "\033[32m container $containerName stoped success \033[0m"
break
else
echo -e "\033[33m container $containerName retry stop...... \033[0m"
$(stopContainer $containerName)
fi
fi
done
done
crontab
(一搬都自带)yum install vixie-cron
yum install crontabs
crontab
的命令systemctl start crond.service //启动服务
systemctl stop crond.service //关闭服务
systemctl restart crond.service //重启服务
systemctl reload crond.service //重新载入配置
systemctl status crond.service //查看状态
//或者
crond start
crond stop
crond restart
crond reload
crond status
启动时出现如下情况就用这个命令rm -rf /var/run/crond.pid
crontab
的命令格式{
minute} {
hour} {
day-of-month} {
month} {
day-of-week} {
full-path-to-shell-script}
minute: 区间为 0 – 59
hour: 区间为0 – 23
day-of-month: 区间为0 – 31
month: 区间为1 – 12. 1 是1月. 12是12月.
Day-of-week: 区间为0 – 7. 周日可以是0或7.
crontab
的命令示例1、在 凌晨02:00运行
0 2 * * * /home/linrui/XXXX.sh
2、每个工作日22:00都进行备份作业。
0 10 * * 1,2,3,4,5 /home/linrui/XXXX.sh
或
0 10 * * 1-5 /home/linrui/XXXX.sh
3、每10分钟运行一次命令
*/10 * * * * /home/linrui/XXXX.sh
4、每个月的1号 15:30 运行
30 15 1 * * /home/linrui/XXXX.sh
docker容器
定时启动配置任意位置使用
)。1.针对某个用户添加定时任务
crontab -e
2.针对系统添加任务
vim /etc/crontab
tzselect
根据提示选择:
5 --> 9–>1–>1–>ok
rm /etc/localtime
,然后回车ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
,查看时间格式crontab -e
1.激活crontabs
systemctl start crond.service
2.查看crontabs状态
service crond status
chmod -R 777 start.sh
设置每天早上9.10分启动start.sh
脚本
其中/usr/bin/bash
时bash命令的存放路径,是用来执行脚本的环境变量,which bash
可找出没有这个的话会报错,导致脚本不能被执行。
10 9 * * * /usr/bin/bash /mysoft/start.sh >/mysoft/log.txt
crontab -l