作用:计划任务主要做一些周期任务,如定期备份数据
所有计划任务执行的输出都会以邮件形式发送给指定用户,除非重定向
1.一次调度执行at
环境:安装at并开启atd
语法格式:
at <+time>
例如:now +3min
也可以用输入重定向:
at now +3min < txt.at
其中注意,如果使用sudo用户执行at,并重定向,要注释sudo用户执行命令需要密码的代码,并取消注释sudo用户执行命令无需密码的代码
## Allows people in group wheel to run all commands
#wheel ALL=(ALL) ALL
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
2.循环调度执行
2.1 cron,crontab以及anacron的关系
cron是大多数linux发行版都自带的守护进程(daemon),用来重复运行某些被设定好了确定的运行时间的任务,这些任务可以是每个月运行、每周运行、每天运行,甚至是每一分钟运行。用cron执行的任务适合于24小时运行的机器,cron执行的任务会在设定好的时刻执行,当机器处于关机状态下并错过了任务执行的时间,cron任务就无法预期执行了。
crontab(cron table的简称)既可以指cron用来定期执行特定任务所需要的列表文件,又可以指用来创建、删除、查看当前用户(或者指定用户)的crontab文件的命令。
anacron不是守护进程,可以看做是cron守护进程的某种补充程序,anacron是独立的linux程序,被cron守护进程或者其他开机脚本启动运行,可以每天、每周、每个月周期性地执行一项任务(最小单位为天)。适合于可能经常会关机的机器,当机器重新开机anacron程序启动之后,anacron会检查anacron任务是否在合适的周期执行了,如果未执行则在anacron设定好的延迟时间之后只执行一次任务,而不管任务错过了几次周期。举个例子,比如你设定了一个每周备份文件的任务,但是你的电脑因为你外出度假而处于关机状态四周,当你回到家中开机后,anacron会在延迟一定时间之后只备份一次文件。由于发行版的不同,cron守护进程如何运行anacron会有所不同。
---------转载自爱折腾的小白)
2.2用户级:crontab -e
存储位置
[root@alytest ~]# ls /var/spool/cron
基础命令
[root@alytest ~]# crontab -l #显示当前任务
root@alytest ~]# crontab -r #删除任务
root@alytest ~]# crontab -e #编辑任务
管理员可以 -u usernane 管理其他用户的任务
语法格式
分 时 日 月 年 command或脚本
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
例如 * * * * * /mysql.sh(每分钟执行一次)
0 3 * * * /mysql.sh(每天3点执行一次)
0 3 14 * * /mysql.sh(每月13号3点执行一次)
0 3 14 2 * /mysql.sh(每年2月13日3点执行一次)
0 3 * * 5 /mysql.sh(每周五的3点执行一次)
0 3 14 * 5 /mysql.sh(每月14日的3点或者每周五的3点执行一次)
日和星期是或者关系
*/5 * * * * /mysql.sh(每5分钟执行一次)
2.3系统级:
临时文件的清理 /tmp/var/tmp
系统信息的采集 sar(盲区)
日志的轮转(切割)logrotate (盲区)
语法格式为 : * * * * * username command/脚本/目录
定义位置1
[root@alytest ~]# vi /etc/crontab
定义位置2:/etc/cron.d/*
周期最小为分
[root@alytest ~]# vi /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
#每过一分钟执行
#run_parts 后跟目录,表示执行目录下的所有脚本
| |
| |
| |
\ /
查看[root@alytest ~]# cat /etc/cron.hourly/0anacron
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power >/dev/null 2>&1
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s #启动anacron进程!
| |
| |
| |
\ /
重点 在 /etc/anacrontab anacron进程用于因关机等原因而错过的任务,延迟指定时间后给予执行,最小周期为天
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
假如开机后发现这个任务没有执行,已经过去了一天,那么系统将延迟5分钟后执行
(在/etc/anacrontab中的最后三条默认anacron任务中,nice命令用来调整后面命令的优先级,run-parts命令用来执行设置的目录下的所有脚本,就是说这三条任务分别每天,每周,每月执行/etc/cron.daily,/etc/cron.weekly,/etc/cron.monthly目录下的脚本。所以我们不用自己往/etc/anacrontab中添加anacrontab任务,而只需把脚本放到相应的目录下,anacron就会周期性的执行这些脚本了。
-----------转载自爱折腾的小白)