Linux周期性任务计划

一、周期性任务计划类型:


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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。