Linux定时任务
Linux系统的定时任务用于在系统中定时的执行一些命令或脚本。一般常用的是at,crontab
延时命令at
at命令是系统延时任务发起的工具,是一次性的。
at now+时间
//在一定时间后要执行的动作(回车后显示如下结果)
at>
//在此后输入要执行的命令
可以有多条命令,按Ctrl+D结束输入。
如果执行的命令具有输出结果到屏幕的功能(例如:echo),则到时后结果会以邮件形式发送到当前用户。
at now+5min
//在5分钟后执行什么动作(min:分钟 hour:小时 day:天)
at> reboot //执行重启
at 9:05 //在9:05执行什么动作
at -l //查看系统中存在的延迟任务
1 Mon Aug 3 13:50:00 2015 a root
任务id 执行的时间 执行者
atrm +id //撤销此任务的执行
at 4pm+3days //在3天后4pm执行
at 10am Jul 31 //在10am Jul 31执行
at 1am tomorrow //在明天1am执行
at命令的格式总结: at 小时:分钟 YY-MM-DD(具体到时间的话是发起命令的时间)
at命令执行后不可更改,只能删除。
at用户限制
/etc/at.deny 用户黑名单
/etc/at.allow 用户白名单(这个默认不存在,需要的话自行创建)
用户黑名单:禁止使用at的名单
用户白名单:允许使用at的名单
当/etc/at.allow出现时/etc/at.deny自动失效
定时任务crontab
crontab命令是定期任务,是周期性执行的,是重复的。
用法:crontab -e
发起定时任务,进入vi编辑界面,在此写入时间及命令。
标准格式:* * * * * cammand/脚本
格式:分 时 日 月 周 命令(最好绝对路径)
0 10 * * * /bin/touch /file ///在每一天的10:00都执行touch /file
符号含义:
* 任何时间 , 不连续时间 - 时间范围 */n 隔多久执行
时间表示方式:
*/num 每隔。。。
num1-num2 在num1-num2之间的时间
num1,num2 在num1,num2这两个时间点
num1-num2/num3 在num1-num2之间每隔num3
* * 1 1 1 1月1号和一月的每个周一
* * * * * * 每分钟
0 * * * * 每小时
0 0 * * * 每天
0 0 1 * * 每月1号
05 * * * * 每小时整点过5分
05 02 * * * 每天的2:05am
30 08 01 * * 每月1号早上8:30
00 07 25 12 * 12月25日7:00am
30 16 * * 5 每个周五的4:30pm
*/5 * * * * 每隔5分钟
0 0 1 jan 0 1月1日午夜和每周日
*/10 9-17 1,15 * * 在每月1号和15号9:am-5:00pm间每隔10分钟
分钟:0-59 小时:0-23 日:1-31 月:1-12(可以用名称) 周0-7(0和7都表示周日,可以用名称)
注意:在定时任务中,%有自己的含义,所以在定时任务中调用脚本时,%前要加转义符\
crontab -l //显示当前用户的定期任务列表
crontab -r //删除当前用户的定期任务
crontab -u 用户名 //以该身份执行定期任务操作
crontab任务的记录文件 /var/spool/cron/[username]
每当有一个用户创建crontab任务,就会在/var/spool/cron中创建一个以该用户为名的文件,其中的内容就是任务的内容。
当删除crontab任务后,对应在/var/spool/cron中以该用户为名的文件也会被删除。
每个用户只能建立一个/var/spool/cron/[username]文件,但可以在文件中加入多个定时任务。
crontab的用户限制:
如果太多用户可以被允许使用crontab命令的话,系统负载会过大,需要进行限制
/etc/cron.deny 用户黑名单
/etc/cron.allow 用户白名单(这个默认不存在,需要的话自行创建)
用户黑名单:禁止使用crontab的名单
用户白名单:允许使用crontab的名单
当/etc/cron.allow出现时/etc/cron.deny自动失效