RHCE033--计划任务
时间:2010-10-02 来源:twenty_four
- at:安排延时任务
- atq:查询当前的等待任务
- atrm:删除等待任务
- 利用/etc/at.allow和/etc/at.deny这两个文件可以限制用户对at的使用,在Linux中
- cron服务是通过crontab命令来设定的:
- 比如说,每天19:04显示问候信息:
- 晚上11点到早上8点之间每两个小时提醒:
- 每个月的4号和每个星期的周一到周三早上11点执行某个命令:
- 每个周六的11:00pm重启xinetd服务:
- 在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
- 每月1号凌晨2点,清理/tmp目录下的文件:
- 每年4月20号给twentyfour发信祝他生日快乐:
- crontab计划任务编写的步骤:
一、Linux的计划任务
Linux系统需要频繁定期执行的任务包括:转移日志文件以避免装满文件系统,
备份数据库以及连接时间服务器来执行系统时间同步等等。同时为了降低系统
管理员的工作量,通过Linux的计划任务就可以实现这些需求。
Linux系统支持一些能够自动执行任务的服务我们称其为计划任务:
at:指定一个时间执行一个任务
cron:根据一个时间表自动执行任务
anacron:在一个指定时间间隔错过后自动执行任务(不作具体介绍)
二、at功能介绍
at服务:安排一个任务在未来执行
at服务需要系统后台有一个atd进程
[root@51cto ~]# service atd start
启动 atd: [确定] //启动at服务
常用指令
at命令的写法非常灵活:
at 18:00pm July 9
at 6 pm Monday
at 2:00
at noon + 5 minutes
回车后可以在之后的at>提示符下输入任务指令,完成后Ctrl+D存盘退出。
[root@51cto ~]# at now //立刻执行的计划任务
at> echo welcome to 51cto >/root/huihui //重定向内容
at> <EOT> //按Ctrl+D保存退出
job 9 at 2010-10-01 06:08
[root@51cto ~]# cat /root/huihui
welcome to 51cto
[root@51cto ~]# clock
2010年10月01日 星期五 06时09分31秒 -0.106026 seconds
[root@51cto ~]# at 06:11 //制定06:11执行的计划任务
at> echo welcome to blog.51cto.com >>/root/huihui //追加内容
at> <EOT> //按Ctrl+D保存退出
job 10 at 2010-10-01 06:11
[root@51cto ~]# date
2010年 10月 01日 星期五 06:10:51 PDT
[root@51cto ~]# cat /root/huihui
welcome to 51cto
welcome to blog.51cto.com
[root@51cto ~]# date
2010年 10月 01日 星期五 06:11:05 PDT
[root@51cto ~]# date //显示当前时间
2010年 10月 01日 星期五 06:17:14 PDT
[root@51cto ~]# at 07:00
at> /bin/date //7点执行/bin/date
at> <EOT>
job 11 at 2010-10-01 07:00
[root@51cto ~]# atq //查询当前的等待任务
11 2010-10-01 07:00 a root
[root@51cto ~]# atrm 11 //删除上面的等待任务
[root@51cto ~]# atq //查询当前的等待任务,没显示
只有写在/etc/at.allow文件中的用户才可以使用at(即使不出现在/etc/at.deny中)
三、cron功能介绍
cron是一个可以用来根据时间、日期、月份、星期的组合来调度重复任务执行的守护进程
要使用cron服务,需要vixie-cron RPM包,运行crond服务即可
[root@51cto ~]# rpm -q vixie-cron //查看是否已经安装好软件包,默认装好了
vixie-cron-4.1-76.el5
[root@51cto ~]# service crond status //查看此服务是否启用
crond (pid 3121) 正在运行…
cron服务是通过crontab命令来设定的,crontab -e是针对用户的cron服务设计的,如果
是由系统执行的计划任务,则不需要用crontab -e而只要编辑/etc/crontab这个文件。
cron服务每分钟不仅要读一次/var/spool/cron内的文件,而且要读一次/etc/crontab,因此
可以通过该文件运用cron服务。
注意:用crontab配置针对的是某个用户的任务,而编辑/etc/crontab则针对的是系统的任务:
[root@51cto ~]# cat /etc/crontab //查看/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,那么该数据作为mail发给root
HOME=/ //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行里头的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行里头的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行里头的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月执行里头的脚本
分钟(0-59)小时(0-24)天(1-31)月(1-12)周(0-7)用户名 脚本目录
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
默认脚本存放在/var/spool/cron/<username>
比如说root查看自己的cron设置:crontab -u root -l / crontab -l
再例如,root想删除51cto的cron设置:crontab -u 51cto -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vim编辑模式,编辑的内容一定要符合下面的格式:M H D m d cmd
M: 分钟(0-59)
H:小时(0-23)
D:天(1-31)
m: 月(1-12)
d: 一星期内的天(0~6,0为星期天)。
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量
04 19 * * * echo "good morning" >> /root/24.txt
[root@51cto ~]# date
2010年 10月 01日 星期五 19:04:28 PDT
[root@51cto ~]# cat /root/24.txt
good morning //测试使用而已
[root@51cto ~]# crontab -l //查看计划列表
04 19 * * * echo "good morning" >> /root/24.txt
0 23-8/2 * * * echo "have a good dream " >> /root/24.txt
0 11 4 * 1-3 command line
0 23 * * 6 /sbin/service xinetd restart
0 6-12/3 * 12 * /usr/bin/backup
0 2 1 * * rm -f /tmp/*
0 * 20 4 * root mail [email protected] < echo "happy birthday to you 24"
注意:单纯是echo的话从屏幕是看不到任何输出的,因为cron把任何输出都email到root
邮箱了,还有就是在修改完/etc/crontab之后,可能不会马上执行,可以重启服务
/sbin/service crond restart ,因为crontab是读到内存中的。
1、启动crontab服务
service crond start|restart
2、编写计划任务
crontab -e (具体如上,或者其它的方法)
service crond restart
3、查看cron日志。