创建定时任务并测试定时任务
- 编辑crobtab : vim /etc/crontab
- 在crobtab文件里最后一行添加:* * * * * date > /etc/testClean.txt(每分钟执行一次,将系统当前时间打印在指定目录test.txt文件内,测试定时任务是否能执行);
- 每次添加命令后,保存,都需重新提交的crontab文件:crontab crontab
- 重新启动cron服务,是crontab立马生效:service cron start
- 查看cron状态:service cron status ;状态为Active(Running),出现下图中标记部分说明定时任务成功
- 确认cron.service能执行后,再次编辑crobtab 文件
- 添加0 8 * * * . /etc/profile;/bin/bash /etc/CleanScadaLogs.sh > /etc/testLog.txt
- 命令解释:
0 8 * * * “每天早上8点执行”
. /etc/profile;/bin/bash “加载linux环境变量path路径”
/etc/CleanScadaLogs.sh “执行指定路径下脚本”
> /etc/testLog.txt “将脚本内打印的文字输入到文本中,以便于查看脚本是否启动”
9)重复3、4、5步,出现下图所示则表示成功
3.2创建shell脚本:CleanScadaLogs.sh
3.2.1命令展示:
3.2.2命令解释:
- #!/bin/bash “注意与crontab中保持一至”
- . /etc/profile “加载linux环境配置文件”
- PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin “环境变量path路径”
- export PATH “导入路径”
- docker exec ais-cell-qz-server sh -c “进入docker镜像”
- find “查找”
- /u01/logs/JhongScada -mtime +6 -name "*.log*" -exec rm -rf {} \; “删除固定路径下7天前的*.log*日志”
3.2.3手动操作执行CleanScadaLogs.sh脚本
输入命令:sh CleanScadaLogs.sh 或 ./CleanScadaLogs.sh,确认命令能执行,确定脚本命令不存在错误
3.3测试定时任务是否执行
- 查看定时任务状态
- Cat /etc/testABAB.txt 查看文本是否打印
- 查看docker 镜像指定路径下/u01/logs/JhongScada日志是否被删除
4 cron定时任务不执行总结
- shell脚本中#!/bin/bash 或#!/bin/sh 与crontab中shell=xxx 、查看linux环境变量中shell=xxx格式(命令:env),尽量保持三者一致,防止因为此原因导致定时任务不执行。
- 防止因环境变量不执行cron定时任务,在定时任务前加入 . /etc/profile;/bin/bash
- /etc/CleanScadaLogs.sh > /etc/testLog.txt,“> /etc/testLog.txt”添加此命令的必要性,用来判断定时任务是否执行了shell脚本,由于系统的不同,cron日志打印输出不同,此文本就类似于日志的功能。
捕获日志: cat testLog.txt
- 当出现如下图报错:创建脚本CleanScadaLogs.sh时,可能存在权限问题(chmod u+x CleanScadaLogs.sh 解决脚本权限问题)。
- 当出现如下图报错:原因是脚本在windows下创建,只需在notePad++文本格式转换成unix即可。
- Shell脚本内加入路径,防止因路径加载不到不能执行shell脚本
第一种方式: . /etc/profile
第二种方式: PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
- “导入路径”脚本写好后要先测试脚本是否能执行;docker exec -it ais-cell-qz-server sh -c 虽然手动编辑能执行,但是在定时任务执行时会因为“-it”导致命令不生效,去掉方能执行!