一、周期性任务计划类型:
1、一次性的任务执行(at,batch )--不重要:
A、at:
交互式:让用户在at>提示符下输入多个要执行的命令。
如:#at 10:02,进入at命令提示符,如下:
#at > ls /usr/local
#at > cat /etc/passwd
#提交任务:ctrl+d
#查看任务计划列表:at -l
#删除一个尚未执行作业的方法:at -d job_num或者atrm job_num
批处理:将任务的各命令写入文件,由at进行调用,格式:at -f /path/to/at_job_file TIME
如: #at -f at.txt 15:22 ,其中at.txt的内容如下:
ls /usr/local
cat /etc/passwd
任务计划的执行结果:通过邮件的方式发送给任务提交者。可以通过mail命令查看邮件。
B、batch:与at不同,不能指定时间,它自动选择系统空闲时执行。
2、周期性的任务执行(crontab、anacron)--重要:
A、系统cron:通常定义在/etc/crontab中。比如,定时删除tmp目录下的文件。
#cat /etc/crontab,每行定义一个独立的任务,具体内容如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# 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
B、用户cron:通常定义在/var/spool/cron/UserName中。
使用crontab命令实现用户cron:
-l :查看自己的cron任务列表
-e :通过EDITOR变量中定义的编辑器打开用户自己的cron配置。
如:#crontab -e,定义内容如下:
*/5 * * * * /bin/echo "hello cron"
-r :移除用户的crontab
如果是管理员:
-u UserName :为别的用户配置crontab任务。
如:#crontab -e -u hadoop 为hadoop用户配置其任务。
注意1:在cron中定义的要执行的命令,如果不适用类似/etc/crontab中的PATH,必须使用命令的绝对路径。
*/5 * * * * /bin/echo "hello cron" &>/dev/null
注意2:如果crontab编辑文件中,如果有%,请转移\%或者用单引号,否则无法执行。
0 */3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
0 */3 * * * /bin/touch ~/testfile_`date +‘\%Y-\%m-\%d‘`.txt
注意3:如果不想接收邮件,可以通过重定向或者MAILTO="" ,如果不想法建议用重定向。
*/5 * * * * /bin/echo "hello cron" &>/dev/null
例:每天 6 9 12 点,查看一下当前系统关在的所有文件系统,并将查看的结果追加到/tmp/mounts.txt文件中。
0 6,9,12 * * * /bin/mount >> /tmp/mounts.txt
注意4:比每的那个单位小的一定要给具体的值,这个值有自己来定。
例:每天每两小时取当前系统内存空间余量,并将其保存至/stats/memory.txt文件中。
0 */2 * * * /bin/grep "^MemFree"/proc/meminfo >> /stats/memory.txt
注意5:实现秒级别的任务(因为任务的最小时间为分钟)
例:每10秒钟执行一次echo "hello cron"
* * * * * for i in {0..4};do /bin/echo "hello cron "; sleep 10; done
C、时间表示法:
a、每个时间位都应该使用其可用的有效范围内的值。
b、某时间位上的*表示对应位的有效取值。
c、-:连续的时间点,如30-35 7 * * * 每天的7点30-35分执行,每分钟执行一次。
d、,:离散的时间点取值,如:5,15,25,35 * * * 每小时的5 15 25 35分钟执行一次。
e、/#:在指定时间范围内,每隔#执行一次。如:0/20 * * * 每20分钟执行一次;3-55/3 * * * 在3-55分之间每三分钟执行一次。
D、anacron:是cron的一种补充,能够有效的去检查cron中某任务在过去某个周期内尚未执行的任务,
在开机后某个时间点去尽快执行一次。这个执行的时间点是在/etc/anacrontab中定义的。
#cat /etc/anacrontab ,内容如下:
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,某个周期内尚未执行的任务,在开机后5分钟执行
7 25 cron.weekly nice run-parts /etc/cron.weekly,某个周期内尚未执行的任务,在开机后25分钟执行
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly,某个周期内尚未执行的任务,在开机后45分钟执行
二、mail命令:列出邮件列表。用quit退出邮件。
1、通过-s 指定主题subject,并将文件/path/to/somefile中的内容作为邮件内容,发送给userName。
#mail -s "Subject" userName < /path/to/somefile
2、通过-s 指定主题subject,发送给用户,并在>在输入邮件内容,通过ctrl+d提交邮件。
#mail -s "Subject" userName