思路:在/docker-compose目录下添加一脚本restart.sh,设置docker关闭和重启,添加到crontab任务里面:
启动cron服务: /etc/init.d/cron restart (或者 service cron start)
查看cron状态: /etc/init.d/cron status
添加定时任务: crontab -e (每台3点和17点重启服务器)
查看定时任务:crontab -l
以上操作完成后,发现定时任务没有生效,但手动执行脚本restart.sh有效。
(1、4、5是关键 --> 1 修改PATH,5 修改/etc/pam.d/cron文件,4 修改restart.sh脚本:cd /docker-compose )
原因:1、crontab 和 我们手工执行的shell脚本./restart.sh是两套东西。
crontab会有一套初始默认的环境变量,包括PATH、SHELL、HOME等
尤其是PATH,默认的值是PATH=usr/bin:/bin,但docker-compose命令需要PATH=usr/local/bin,
因此将usr/local/bin添加到PATH后面。
PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin
(最简单保险的方法是使用env命令查看当前用户的环境变量信息,将其全部复制到 crontab -e中)
2. crontab包括用户调度和系统调度,系统调度在/etc/crontab文件中,如系统重启,则必须写在系统调度中。
3. 如果不想要发邮件,则在命令后面加上 >/dev/null 2>&1 或者 &> /dev/null 或者编辑crontab,在第一行加入MAILTO=“ ”。(邮件积压过多会挤爆系统)
4. docker-compose命令必须在含有 docker-compose.yml 的目录下执行,而不是在usr/local/bin目录下执行。
5. 对docker命令,需要修改/etc/pam.d/cron文件,将其中的required改为sufficient,然后重启cron服务:/etc/init.d/cron restart
6. crontab -e 设置定时任务时,可在 * * * * *后面直接加上要定时执行的操作命令。
7. echo $(date +%T) >> /home/scratch/docker-compose/aa.txt
echo $(date +%T) > /home/scratch/docker-compose/aa.txt
附加:
查看docker服务器状态:docker ps -a
查看crontab任务:sudo tail -f /var/log/syslog
crontab设置格式:
* * * * * * * /docker-compose/restart.sh 每分钟
*/2 * * * * /docker-compose/restart.sh 每隔五分钟
0 */5 * * * /docker-compose/restart.sh 每隔五小时
0 5 * * * /docker-compose/restart.sh 每天五点
crontab命令:
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)