linux下crontab的使用及利用crontab系统定时处理事务

这里是crontab的基本介绍,并且使用crontab来定时周期性的完成事务。

比如:我们每天需要备份数据库,或者定时执行某项转换任务等,crontab就派上用场了。

一 linux下crontab的使用
1.作用
使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户。

2.格式
crontab [ -u user ] 文件
crontab [ -u user ] { -l | -r | -e }

3.主要参数
-e:执行文字编辑器来设定时程表,内定的文字编辑器是vi。
-r:删除目前的时程表。
-l:列出目前的时程表。

crontab文件的格式为“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三个环境变量。

4.说明
和at命令相比,crontab命令适合完成固定周期的任务。

5.应用实例
设置一个定时、定期的系统提示:
[cao @www cao]#crontab -e
此时系统会打开一个vi编辑器。
如果输入以下内容:35 17 * * 5 wall "Tomorrow is Saturday I will go CS",
这样每个星期五17:35系统就会弹出一个终端,提醒星期六可以打打CS了!

用crontab命令实现每天定时的病毒扫描
前面已经介绍了一个简单的crontab命令操作,这里看一些更重要的操作。

(1)建立一个文件,文件名称自己设定,假设为caoproject:
#crontab -e

(2)文件内容如下:
05 09 * * * antivir
用vi编辑后存盘退出。antivir是一个查杀Linux病毒的软件,当然需要时先安装在系统中。

(3)使用crontab命令添加到任务列表中:
#crontab caoproject
这样系统内所有用户在每天的9点05分会自动进行病毒扫描。

6.高级应用:crontab每隔5分钟运行一个怎么写?

第1列分钟1~5 9
第2列小时1~2 3(0表示子夜)
第3列日1~3 1
第4列月1~1 2
第5列星期0~6(0表示星期天)
第6列要运行的命令 

那crontab每隔5分钟就可以有如下的写法:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/a.sh

1-59/5 * * * * /home/a.sh

*/5 * * * * /home/a.sh

呵呵,以此类推

0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。

二 利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。

1、创建保存备份文件的路径/mysqlbak
#mkdir /mysqlbak                           //这个是建立在根目录下的
2、创建/usr/sbin/mysqlbak文件
#vi /usr/sbin/mysql bak
输入
rq=` date +%Y%m%d `
tar zcvf /mysqlbak/mysql$rq.tar.gz /var/lib/mysql/wiki
或者写成
rq=` date +%Y%m%d `
mysqldump  -u root -p123456 wiki | gzip > /mysqlbak/mysql$rq.sql.gz
//我这里是备份的是wiki 数据库用mysqldump 命令 压缩.sql文件,相关mysqldump 命令清查看手册或者
建入以下命令#mysqldump --help 查看系统帮助
/var/lib/mysql是你数据库文件的目录,部分用户是/usr/local/mysql/data,每个人可能不同
/mysqlbak/表示保存备份文件的目录,这个每个人也可以根据自己的要求来做。
3、修改文件属性,使其可执行
# chmod +x /usr/sbin/mysqlbak
4、修改/etc/crontab
#vi /etc/crontab
在下面添加
01 3 * * * root /usr/sbin/mysqlbak
表示每天3点01分钟执行备份
5、重新启动crond
# /etc/rc.d/init.d/crond restart
完成。
这样每天你在/mysqlbak可以看到这样的文件
mysql20071119.tar.gz(mysql20071119.sql.gz)
你直接下载就可以了。
在恢复数据库时,在tar命令执行前,停止数据库服务进程或锁定数据库, 否则恢复数据时,会出现数据库损坏的情形 

三 如何使用crontab周期自动执行php脚本

以前看到过类似的问题,这里给出一个解决方案。

新建一个crontab_test.php文件,文件内容如下:

<? php

$filename 
'crontab.txt' ;

$content  "当前时间是:" . date ( "Y-m-d H-i-s" , time ()). "" ;



if (
is_writable ( $filename )) {

     if (!
$handle  fopen ( $filename 'a' )) { //写入方式打开 指针在文件尾

             
echo  "不能打开文件 $filename" ;

             exit;

     }

     if (
fwrite ( $handle $content ) ===  FALSE ) {

             echo 
"不能写入到文件 $filename" ;

             exit;

     }

     echo 
"成功地将 $content 写入到文件$filename" ;

     
fclose ( $handle );

} else {

     echo 
"文件 $filename 不可写" ;

}

?>

 然后执行以下命令:

crontab -e
在这个文件里面新增加一行:
*/5 * * * * /usr/local/apache/htdocs/blog.zsqhw.com/ways/crontab_test.php
再重启crond服务:
/sbin/service crond restart
好了,等等看结果吧~~~

好了,一般来说会失败的,问原因?因为php执行问题啊!!

解决办法:

首先whereis php

结果:/usr/local/php

拷贝php可执行文件到/usr/local/bin

cp /usr/local/php/bin/php /usr/local/bin/php

然后再终端上运行 php -q /usr/local/apache/htdocs/blog.zsqhw.com/ways/crontab_test.php  保证可以成功的话后面的才能正确运行。

然后重新编辑crontab -e

修改为: */5 * * * *  php -q /usr/local/apache/htdocs/blog.zsqhw.com/ways/crontab_test.php

然后处理一下crontab_test.php文件权限

chmod +x /usr/local/apache/htdocs/blog.zsqhw.com/ways/crontab_test.php

最后重启 /sbin/service crond restart

ok!

我们这段程序的目的是每隔5分钟就自动记录当前时间到文本文件,你打开文本文件看看就可以知道程序是不是正常运行了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值