您的位置:首页 > 运维架构 > Shell

shell定时器-crontab

2016-08-11 20:53 260 查看

Linux的crontab

crontab定时器(包括执行shell)

如果要让unix系统重复,定期做一件事,我们就会用到crontab.
实质上真正去执行每一个重复任务的是cron,cron是的unix家族的一个后台常驻程序,cron是由cron文件来驱动的,crontab只是用来管理cron文件的,比如给cron file里面添加任务,删除任务,文件里记录了要执行的任务,以及其"时间规则"
crontab的作用,正如crontab的man文档中写的: maintain crontab files for individual users 
crontab提供给我们的接口
我们是不需要去直接编辑cron file,修改查看cron file都应该使用crontab

限制用户使用crontab的文件有:/etc/cron.allow /etc/cron.deny 。 

当使用crontab建立工作排程后,将被记录到/var/spool/cron里。 

cron执行的每一项工作都被记录到/varlog/cron里去。

crontab参数:  www.2cto.com  

-u:只有root才可能,帮其他用户建立或移除工作排程。 

-l:查阅crontab的工作内容 

-r:移除所有的crontab的工作内容,移除一项,用-e编辑。

例1:每天12:00给root发信。

[root@lyy etc]# crontab -e     #用vi编辑 

0 12 * * * mail root -s "at 12:00" < /root/.bashrc

每项工作有六个字段分别是:

分钟    小时    日期    月份    周    指令 

0-59    0-23    1-31    1-12    0-7    指令         #0和7都代表星期天

辅助特殊字符:

* (星号)代表任何时刻 

,(逗号)代表分隔时候。如3点与6点 就是3,6 

-(减号)代表一段时间范围内。如:3点到6点 就是3-6 

/n(斜线)n代表数字,即每隔n单位。如每隔五分钟,/5

例2:每隔3分钟,在屏幕输出字符

# crontab -e 

# crontab -l 

*/3 * * * * echo "hello world !!!!!" > /dev/pts/0    #pts/0是用telnet的终端接口

查看一下记录  www.2cto.com  

# cat /var/log/cron

Dec 12 20:27:01 lyy crond[9865]: (root) CMD (echo "hello world !!!!!" > /dev/pts/0) 

Dec 12 20:30:01 lyy crond[9908]: (root) CMD (echo "hello world !!!!!" > /dev/pts/0)

例3:每个星期三下午14:30分发送一个邮件给pc

 crontab -e 

30 14 * * 3 mail pc -s "test" < /home/text.txt

crontab -e 是针对用户的cron设计的,如果是系统例行性任务,只要编辑/etc/crontab文件就可以了。

 

查看/etc/crontab内容

# cat /etc/crontab 

SHELL=/bin/bash        #接口 

PATH=/sbin:/bin:/usr/sbin:/usr/bin    #执行路径搜寻 

MAILTO=root            #以mail发送者 

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    #每个月1号

取消不要的输出项目:把输出的结果以命令重导向到/dev/null

安全检验:由于一些木马以例行命令方式值入,所以可以通过 

检查/var/log/cron来发现。

周与日月不可同时并存

如:  www.2cto.com  

30 12 11 9 5 root echo "just test " #这是错误的写法。

本来以为九月十一号是星期五执行这个任务,但是系统可能会判定每个星期 

五执行一次或每年九月十一号分别执行。

唤醒停机期间的工作任务 anacron

anacron不能取代crontab,它存在目的是处理非24小时在线的linux系统的 crontab的执行。它是以天为单位或在开机后执行,它会检查停机期间的crontab并执行,然后就自动停止了。

 

linux命令:

建立任务crontab -e 

*/1 * * * * echo 'ddd'/var/test.txt 一分钟写一次ddd到test.txt文件中

* * * */1 * sh /var/jboss-4.0.5.GA/server/default/log/temp/delete_log1.sh 一个月运行一次delete_log1.sh脚本

 

sh脚本(delete_log1.sh)

dd=`date -d"1 month ago" +%y-%m`

rm -vf /var/temp/log.20$dd-*     删除当前时间的起一个月的匹配文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 管理 crontab