在Linux中能实现计划任务的主要有三个,分别是at,batch,cron

at

    at命令用于执行一次性计划任务,使用/etc/at.allow(白名单)、/etc/at.deny(黑名单)控制允许那些用户使用at命令,如果两个文件都不存在则只有root用户能使用。     centos7默认存在/etc/at.deny文件,此文件为空,表示所有用户可用at任务.     

使用格式:
at  [option]  time 
	-m	at的工作完成后不管有没有输出,都用email通知使用者工作完成。
	-l	类似于atq,列出at的任务列表
	-d	类似于atrm,删除at任务
	-c #	列出id为#的任务实际运行的工作指令
TIME格式:
	HH:MM		
	HH:MM	YYYY-MM-DD	
	HH:MM +* Unit[minutes、hour、day、weeks]  #在某个时间再加个时间
例如 at  now  +5 minutes   五分钟后执行任务
	at  now +5 minutes 
	echo "hello world" >/dev/pts/4		#输出到终端

    注意:at所有任务执行完后都将结果发送邮件给用户,默认邮件存放地址为/var/spool/mail/username

    使用mail/mailx命令输入相应的编号即可查看.

    

batch

与at一样,是一次性任务,其不需要指定时间,当系统空闲时自动执行命令.很少使用. 用法: batch 执行回车,进入交互式界面,按ctrl+d提交任务     

** crontab **

    crontab,用于提供周期性计划任务 相关程序包:     cronie 主程序包,提供crond     cronie-anacron 辅助程序包,用于监视crond是否正确执行, 例如,当执行任务时系统关机了,crond无法执行任务,当系统启动后被anacron监测到crond执行失败,则立即执行一遍任务.     crontabs 提供维护工具

[root@localhost ~]# rpm -qa | grep cron
cronie-1.4.11-14.el7_2.1.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-anacron-1.4.11-14.el7_2.1.x86_64

相关文件:      /etc/cron.allow 运行执行crond的用户列表      /etc/cron.deny 拒绝执行crond的用户列表     /etc/crontab 系统任务文件     /etc/cron.d/ 系统任务文件夹 计划任务:     系统cron任务,通常用于执行系统维护操作 /etc/crontab /etc/cron.d/*     用户cron任务,通常用于用户操作任务 /var/spool/cron/user_name 配置文件格式:

    系统任务 /etc/crontab
         *  *  *  *  * user-name  command
    用户任务 /var/spool/cron/user_name
         *  *  *  *  *   command		#区别在于不用指定用户
         *分别代表 minutes, hour ,day of mouth, month, day of week 

时间表示方法:     1)具体时间,一个特定的值     2)* ,表示所有值,每时每刻都执行任务     3)离散取值,逗号分隔 “#,#”     4)连续取值,短减号分隔 “#-#”     5)在指定的范围上指定步长, “*/3” (每3分钟运行一次) , “20-50/3” (在20-50分钟内每隔3分钟运行一次)

示例
建立系统任务: 
	[root@localhost cron.d]# vim /etc/crontab 
	* */3 * * *    gentoo  /bin/bash  wall <123.txt
	0 */3 * * *    gentoo /bin/bash   wall <123.txt 
	第一个是错误示例,当大范围为*时,小范围要给具体值
建立用户任务:
root用户下为别的用户建立用户任务: (只有root能为别的用户建任务)
    [root@localhost ~]# crontab -u gentoo
普通用户自己建立用户任务:
    [hurn@localhost ~]# crontab -e


默认情况下,crond执行的所有命令输出都将以邮件方式发送给相应的用户,如果不想发到邮箱则需要使用重定向:
command >/dev/null 	正确的扔掉,错误的发送邮件
command &>/dev/null	所有的都扔掉

当用户要实现秒级别的任务或则不能被相应*的取值范围整除的数,则可以通过sleep命令实现.
sleep	# (smhd)  s秒,m分,h时,d天
例如实现每3秒执行一次ps命令:
* * * * *  sleep 3s ; ps 
例如每7分钟执行一次ps命令:
(分钟的取值范围为1-60,不能被7整除,实际上最后一轮并没有执行)
* * * * * sleep  7m ; ps