一、循环执行的例行性工作调度
-
大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了。Cron的格式是这样的,每一行代表一个任务计划,总共分成两部分,前面部分为时间,后面部分要执行的命令。前面的时间是有讲究的,这个时间共分为5段,用空格隔开(可以是多个空格),第一段表示分钟(0-59),第二段表示小时(0-23),第三段表示日(1-31),第四段表示月(1-12),第五段表示周(0-7,0或者7都可以表示为周日)。从左至右依次是:分,时,日,月,周(一定要牢记)!
-
例如:每天凌晨1点20分清除/var/log/slow.log这个文件这样的任务。
20 1 * * * echo “”>/var/log/slow.log -
crontab -e 打开了/var/spool/cron/username (如果是root则打开的是/var/spool/cron/root)这个文件。使用的是vim编辑器,插入“20 1 * * * echo “” > /var/log/slow.log”,在命令模式下输入:wq保存即可。但是,你千万不要直接用vi命令去编辑那个文件,因为可能会出错,所以一定要使用crontab -e来编辑。
任务计划命令 | 说明 |
---|---|
yum install -y vixie-cron | 安装crond。 |
service crond start | 启动crond服务。 |
service crond status | 查看crond服务状态。 |
vi /etc/crontab | 制定或修改系统的例行性计划任务。 |
crontab -e | 制定或修改当前登录用户的cron计划任务。 |
crontab -l | 列出计划任务。 |
crontab -r | 删除全部计划任务。 |
特殊符号 | 说明 |
---|---|
* | 代表任何时刻。例:0 12 * * * command,表示每天12点执行一次后续命令。 |
, | 代表分隔时段。例:0 3,6 * * * command,表示每天3点和6点各执行一次后续命令。 |
- | 代表一段时间范围内。例:20 3-6 * * * command,表示每天3点到6点的每个小时的20分都执行一次后续命令。 |
/n | n代表数字,即每隔n单位间隔的意思。例:*/5 * * * * command或0-59/5 * * * * command,表示每5分钟执行一次后续命令。 |
实例 | 说明 |
---|---|
01 * * * * root mail xue < /root/test.txt | 每小时给xue发送一封邮件。 |
*/5 * * * * root run-parts /root/runcron | 每隔5分钟执行一次/root/runcron目录下的所有可执行文件。 |
二、实际运行单次工作调度
命令 | 说明 |
---|---|
at now + 3 minutes | 3分钟后执行此任务。 |
at -l | at -l相当于atq,列出目前系统上面的所有该用户的at调度。 |
atq | 列出目前系统上面的所有该用户的at调度。 |
at -d 4 | at -rd相当于atrm,删除在at调度中的作业编号标识为 4的工作。 |
atrm 4 | 取消在at调度中的第4项工作。 |
at -V | 显示at版本号。 |
at -c 4 | 列出第4项工作的实际内容。 |
TIME | 时间格式,可以定义进行at这项工作的时间。格式有:HH:MM ex>04:00在今日的HH:MM时刻进行,若已超过该时刻,则明天的HH:MM进行此工作;HH:MM YYYY-MM-DD ex>04:10 2019-03-17 强制规定在在某年某月某日的特定时刻进行该工作;HH:MM [am|pm] [Month] [Date] ex>04:00 2019-03-17 强制规定在在某年某月某日的特定时刻进行该工作;HH:MM [am|pm] + number[minutes|hours|days|weeks] ex>04:10pm + 3 days(3天后上午4:10) ex>now + 5 minutes(5分钟后) 在某个时间点“再加多少时间后”进行该工作。 |
例:3分钟后在本机屏幕显示"hello world"。
例:3分钟后在远程连接主机屏幕显示"qqqq"。
例:CPU工作负载小于0.8时,才进行你所执行的工作任务。若负载太高,则暂缓执行。
三、anacron开机后立刻检测停机期间应该运行但是并没有运行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止
anacron命令 | 功能 |
---|---|
anacron -f job | 强制执行相关工作,忽略时间戳。job代表由/etc/anacrontab定义的各项工作的名称。 |
anacron -u job | 更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的时间戳为当前日期,但不执行任何工作。 |
anacron -s job | 依据 /etc/anacrontab 文件中设定的延迟时间顺序执行工作,在前一个工作未完成前,不会开始下一个工作。 |
anacron -n job | 立即执行 /etc/anacrontab 中所有的工作,忽略所有的延迟时间。 |
- 用 cron.daily 工作来说明一下 /etc/anacrontab 的执行过程。
1、由/etc/anacrontab分析cron.daily这项工作的天数为一天;
2、读取 /var/spool/anacron/cron.daily 文件中 anacron 上一次执行的时间戳;
3、和当前时间比较,如果两个时间的差值超过 1 天,就执行 cron.daily 这项工作;
4、执行工作时强制延迟时间为 5 分钟;
5、延迟时间过后,开始执行“run-parts /etc/cron.daily”目录中所有的可执行文件;
6、执行完毕后,anacron程序结束。