您的位置:首页 > 运维架构 > Linux

Linux周期性任务计划

2015-05-11 17:01 423 查看
一、周期性任务计划类型:

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
15cron.dailynice run-parts /etc/cron.daily,某个周期内尚未执行的任务,在开机后5分钟执行
725cron.weeklynice run-parts /etc/cron.weekly,某个周期内尚未执行的任务,在开机后25分钟执行
@monthly 45cron.monthlynice 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息