Linux之任务计划
一、单次任务计划
二、周期性任务计划
三、转载陈明乾的博文
一、单次任务计划
命令:
batch:系统空闲时自动执行,不常用
at:可以使用相对时间、绝对时间或模糊时间,例如
相对时间:at now+3min,表示3分钟后执行
绝对时间:at 11:30,表示在11:30执行
模糊时间:at noon | midnight | teatime,表示在对应模糊时间执行
------------------------------------------
at常用选项:
-l:查看等待执行的任务,同atq
-d: 删除未执行的任务,同atrm
-f:指定脚本文件
------------------------------------------
1、使用at计划任务
[root@TESTHOST SPECS]# at now+3min #3分钟后执行的任务 at> cat /etc/passwd #任务1 at> cat /etc/shadow #任务2 at> date #任务3 at> ls /scripts/ #任务4 at> <EOT> #结束Ctrl+d提交任务 job 3 at 2015-04-24 08:20 You have mail in /var/spool/mail/root #执行结果以邮件方式发送给任务发起者
2、查看邮件,使用命令mail
[root@TESTHOST SPECS]# mail #使用mail命令查看邮件 Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/root": 3 messages #下列信息最前面的数字1为邮件编号 > 1 root Fri Apr 24 08:17 61/2298 "Output from your job " 2 root Fri Apr 24 08:18 15/524 "Output from your job " 3 root Fri Apr 24 08:20 62/2327 "Output from your job " & 1 #提示符&后输入邮件编号,查看任务执行结果 Message 1: From [email protected] Fri Apr 24 08:17:14 2015 Return-Path: <[email protected]> X-Original-To: root Delivered-To: [email protected] Subject: Output from your job 1 To: [email protected] Date: Fri, 24 Apr 2015 08:17:14 +0800 (CST) From: [email protected] (root) Status: RO #信息太多,这里略去 ################################################## New mail has arrived. #提示有新邮件到达 Loaded 1 new message N 4 root Fri Apr 24 19:29 31/571 "Output from your job " & q #输入q回车,退出mail Held 4 messages in /var/spool/mail/root #告诉root用户有4条信息 [root@TESTHOST SPECS]#
3、查看等待执行的任务,使用命令at -l或atq
[root@TESTHOST SPECS]# at -l 6 2015-04-24 19:41 a root #数字6为任务编号 [root@TESTHOST SPECS]# atq 6 2015-04-24 19:41 a root
4、删除未执行的任务,使用命令at –d或atrm
[root@TESTHOST SPECS]# at now+3min #新建一个任务计划 at> ls /var at> <EOT> job 7 at 2015-04-24 19:48 [root@TESTHOST SPECS]# at -l #查看待执行任务,任务编号为7 7 2015-04-24 19:48 a root [root@TESTHOST SPECS]# date #查看当前系统时间 Fri Apr 24 19:45:44 CST 2015 [root@TESTHOST SPECS]# at -d 7 #删除未执行的任务,at -d #任务编号 [root@TESTHOST SPECS]# at -l #任务已删除
5、计划执行脚本,使用命令at –f /path/to/scriptfile TIME
注:使用at命令,Ctrl+d提交任务出现如下提示,则证明计划任务依赖的atd服务未启动
Can‘t open /var/run/atd.pid to signal atd. No atd running?
查看atd服务状态,并启动
[root@TESTHOST SPECS]# /etc/init.d/atd status #查看服务状态 atd is stopped [root@TESTHOST SPECS]# /etc/init.d/atd start #启用服务 Starting atd: [ OK ] [root@TESTHOST SPECS]# /etc/init.d/atd status #服务已运行 atd (pid 34529) is running...
二、周期性任务计划
1、依赖服务:crond
[root@TESTHOST SPECS]# service crond status crond (pid 1222) 正在运行...
2、crond配置文件
2.1、 系统crond配置文件及格式:/etc/crontab
[root@TESTHOST ~]# 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 #星号后分别接用户、任务命令
2.2、用户crond配置文件及格式:/var/spool/cron/USERNAME
[root@TESTHOST ~]# crontab -e #编辑当前用户的crond配置文件 no crontab for root - using an empty one #编辑后,保存退出,提示为root用户新建crond配置文件 crontab: installing new crontab [root@TESTHOST ~]# ls /var/spool/cron/ #用户crond配置文件,文件名同用户名 root [root@TESTHOST ~]# cat /var/spool/cron/root # 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 # | | | | | # * * * * * command to be executed #星号后接任务命令 */2 * * * * ls /var
注:系统默认PATH=/bin:/sbin:/usr/bin:/usr/sbin,计划任务中使用的命令不在系统默认PATH中时,则使用绝对路径;使用脚本时,在脚本中自行定义PATH
2.3、配置文件周期格式含义
支持通配符:
*:相应时间点的所有有效取值,例如
3 * * * * #每小时第3分 3 4 * * * #每天的4点03分 3 4 5 * * #每月5号的4点03分
,:离散取值,例如
3,15,27,39,51 * * * * #每12分钟
/:定义指定取值范围内的频率,例如
*/2 * * * * #每2分钟 17 */3 * * * #每3小时的第17分
-:连续取值,例如
17 8-20/3 * * * #每天的8时-20时之间的每小时的第17分
以秒单位执行任务计划:
方法1:
* * * * * sleep 30 && /usr/bin/unison webdata #每30秒
方法2:
* * * * * for i in 0 1 2; do some_job && sleep 15; done; some_job #每15秒,循环次数为(60/n-1)
* * * * * for i in {1..5}; do some_job && sleep 10; done; some_job #每10秒
注意:使用%时要加反斜线。例如:
1 2 3 * * touch ~/file_$(date +\%Y\%m\%d).txt
但使用单引号后也可以不再使用反斜线,例如:
1 2 3 * * touch ~/file_$(date ‘+%Y%m%d‘).txt
2.4、拒收邮件
方法1:配置文件中定义MAILTO=’’
方法2:将命令输出信息重定向 &> /dev/null或> /dev/null 2>&1 #bash下,这两个重定向等价
3、crontab命令
常用选项:
-e:编辑任务计划
-r:移除配置文件,删除部分任务计划使用-e编辑
-l:列出周期性任务
-u USERNAME: #管理员可用的选项,可结合选项-e,-r,-l编辑、删除、查看其他用户的任务
三、转载陈明乾的博文
博主的归纳总结质量都很高,文章的知识结构划分更容易阅读和理解,谢谢哈!
单击图片后放大查看
本文出自 “Arvin Lau” 博客,请务必保留此出处http://64314491.blog.51cto.com/2784219/1638062
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。