Archive for 十二月, 2007

怎么让LINUX系统定时执行相应的任务

Posted by 机器人 on 13th 十二月 2007 in linux/server

思阳一直让我给他想一个比较好的题目,因为下个礼拜他们培训班要让他讲给同学讲一些平时常用的知识。今天这篇文章《《怎么让LINUX系统定时执行相应的任务》》,希望思阳能带给他的同学们。

在我们平时的工作中,可能会有一些情况或者定时去完成它,为了节省成本,不可能排专人定时定点的去完成这些工作,比如,对于服务器的访问情况,我们需要定时去进行统计,很可能这种统计为10分钟一次,或者站点内容我们需要要每天夜间12点进行更新,等等这些情况,我们都需要进行定时执行。

对于上面的情况,当然在window中,有计划任务这一功能来帮助我们完成这样的任务,那么在linux系统中我们怎么去每天定时完成需要定时执行的任务,所以在这里,我们需要引入LINUX系统中,定时执行服务cron进程,crond守护进程它是操作系统的一部分,在LINUX操作系统中,有很多任务需要有频率性的定时执行,它对于系统来讲也是不可缺少的部分,当然在系统启动时,它是默认启动的。

计划任务分配分为:用户计划任务(crontab)和系统计划任务。

1.用户计划任务:

 每个用户可能设置它自己的计划任务,每个用户的计划任务对其它用户来讲是不可见的,这样就可以防止多用户同时设置而造成相应的设置混乱。用户在想建立计划任务时,使用 crontab命令,不过,为了安全,我们可以限制使用crontab 的用户帐号。使用的限制有:

  •   /etc/cron.allow:将可以使用crontab的命令帐号写入其中,不在这个文件中的用户不可以使用crontab命令。
  •  /etc/cron.deny:如果想要禁止那些用户使用crontab命令,那么我们就可以把它的用户帐号写在这个文件中。

注意:对于上面两个文件,cron.allow的优先级比cron.deny的高,也就是说,cron.allow中如果设置了某个用户的账号,那怕我们再把他的账号写到cron.deny中,那么该账号照样能执行crontab命令。一旦用户发现前面文件中存在了用户账号,系统将忽略该账号在后面文件的设置,所以一般我们在设置访问权限的时间,都只设置一个就行了。在添加账号时,为一个账号一行的格式进行添加。

用户所设置的所有计划任务保存在/var/spool/cron中,比如我现在以hqlong这个账号登录,并设置了相应的计划任务,那么在/var/spool/cron中就会生成一个hqlong的文本文件,文件里面为我的计划任务。

另外,cron执行的每一项工作都会记录在/var/log/cron这个登录文件中,所以我们可以通过查看该文件来了解系统的计划任务的执行情况。

crontab的语法:

 

[hqlong@linux~]# crontab [-u username] [-l | -e | -r]\
参数:
 -u :只有root才能执行这个任务,即可能帮助其它用户设置任务
 -e :编辑crontab的工作内容
 -l :查看所有的工作内容
 -r :删除crontab的工作内容

举例:
 1.用hqlong在每天的12:00发信给自己
[hqlong@linux~]# crontab -e
#打开crontab文件,这里我们可以在里面编辑我们的任务,每项任务只能为一行
0  12  *  *  * mail hqlong -s "at 12:00" << /home/hqlong/.bashrc
分 时 日 月 周 !<=============命令行===============>

编辑完毕后,输入:wq就可以保存并退出,如果我们想查看自己设置了哪些计划任务的话,我们就可以通过

 

[hqlong@linux~]# crontab -l
0  12  *  *  * mail hqlong -s "at 12:00" << /home/hqlong/.bashrc

在查看。当然,如果想编辑某一项任务,或者删除某一条任务,我们可以使用

 

[hqlong@linux~]# crontab -e
0  12  *  *  * mail hqlong -s "at 12:00" << /home/hqlong/.bashrc

这里,就可以对里面的内容进行编辑。

就这么几步,系统就会准备在每天的12:00向自己发送一封信件。

如果想删除所有的计划任务,我们可以使用

 

[hqlong@linux~]# crontab -r

注意:这里,将删除当前用户的所有计划任务,如果只是想删除某一项,我们最好使用编辑编辑选项(即:-e)来进行删除

时间参数含义: 

代表含义 分钟 小时 日期 月份
数字范围 0~59 0~23 1~31 1~12 0~7

 比较有意思的是“周”。当周为0或7时,都表示“星期天”。另外,还有一些辅助的字符,如下:

特殊字符 代表意义
* 表示任何时间都接受,举例来讲,在前面的例子中,日、月、周都是*,表示"不论何月,何日星期几的12:00都执行后续命令
表示分隔时段的意思,举例来说,如果要执行的工作是在3:00与6:00就会是:0,3,6 * * *  命令,还有5栏,不过第2栏是3,6表示3与6都适用
-

表示一段时间范围内,如8点到12点之间,每小时的20分都进行一项工作:

20 8-12 * * * 命令

第二栏变成8-12.表示8,9,10,11,12都适用。

/n

n代表数字,即“每隔N单位时间”,例如:每5分钟都进行一项任务,则:

*/5 * * * * 命令

很简单。*写/5,也可以写成0-59/5,意思相同

 2.系统计划任务

在设置系统计划任务时,我们是直接在/etc/crontab这个文件中进行编辑的,设置语法大致和上面的差不多,只是里面多了几个项,如

run-parts:将执行后面所跟的文件夹里的所有文件、

当对用/etc/crontab进行编辑完成以后,可能我们的设置暂时不会生效,因为系统是将该该的内容读取到了内存中的,这时,内存中读取的数据还没有刷新,如果想将该任务马上生效,我们可以启动cron进程

 

/etc/init.d/crond restart

……

参考资料:鸟哥的LINUX私房菜

机器人 2007-12-13 22:22 于 北京

 

asdfdas

Posted by 机器人 on 13th 十二月 2007 in 未分类

http://linux.vbird.org/linux_basic/0430cron.php

#!/usr/bin/php -q

<?php

    /**

     * author:hqlong

    * created:2007-12-13 15:13

          */

    /**

    * 所有股票相关信息缓存

    * 运行时间:23:00

    * frequence:1 day

    * http://r.tswc.tv:81/cron/genStockData

    * F:1

    * 生成去年,和前年的EPS值

    * 运行时间:23:30

    * frequence:one day

    * http://r.tswc.tv:81/cron/genPastEps

    * leval:2

   

    * 将所有股票涨幅预测值生成缓存

    * 运行时间:

    * frequence:3 hours

    * http://r.tswc.tv:81/cron/genAllRise

    * F:3

   

    * 将所有研报个股表现数据缓存

    * runtime:

    * frequence: 3 hours

    * http://r.tswc.tv:81/cron/genAllExhibtion

    * F:4

   

    * 生成组合每天的涨跌幅

    * 参数:date 如果为空,则统计当天所有组合的涨跌

    * runtime:23:59

    * Frequence:1 day

    * http://r.tswc.tv:81/cron/updateBoxPCHG

    * F:5

    *

    * 生成所有个股图片

    * runtime:23:00

    * Frequence:1 day

    * http://r.tswc.tv:81/cron/genAllStockChart

    * level:6

    **/

    $btime = microtime(true);

    $case = $argv[1];

    $url = ”;

    $http = ‘http://r.tswc.tv:81′;

    switch ($case) {

        case ’1′: $url = $http.’/cron/genStockData’; break;

        case ’2′: $url = $http.’/cron/genPastEps’;     break;

        case ’3′: $url = $http.’/cron/genAllRise’; break;

        case ’4′: $url = $http.’1/cron/genAllExhibtion’; break;

        case ’5′: $url = $http.’/cron/updateBoxPCH’; break;   

        case ’6′: $url = $http.’/cron/genAllStockChart’; break;

        default:

            echo ‘nothing!!’;

           

    }

    $time = sprintf(‘%0.5f’,microtime(true) – $btime);

    $logs = ‘Cron ‘.$case.’ execute ‘;

    $logs .= fopen($url,’r') ? ‘success’ : ‘Failure’;

    $logs .= ‘ at ‘.date(‘Y-m-d H:i:s’).’ ‘;

    $logs .= ‘ eclipsed:’.$time.’

‘;

    $f = fopen(‘logs’,'a+’);

    if($f) fwrite($f,$logs);

    echo ‘!Done!’;

?>

愿天下有心人永远快乐,幸福

Posted by 机器人 on 9th 十二月 2007 in mylife

要说这事,还得从两年前说起,还得从两年前说起,那时,那时和登祥一个宿舍,登登常常和姐姐聊天,由于常说咱们宿舍的事,向姐姐(登登姐姐,这样叫比较亲切)提到我们,所以和姐姐也就认识了。

我记得不怎么清了,只是有一点印象,好像是登登向姐姐说他和萌萌(登登女朋友)的事,当然他姐有高兴了,就决定给萌萌送礼物过来,登登一时高兴,就从电话里说出来了,那时,我也只是瞎起哄,也不随便说了一句:“登祥,给姐姐说,我也要一个洋娃娃”,登登那家伙就把原话告诉了他姐:“小龙说,他也要一个”,姐姐当时很爽快的答应了。

那时,也只是随便说了,根本没有在意。后来可能由于他姐工作比较忙,这事就一直搁置着。

两年后,也就是前一段时间,登登和我聊天,问我要不要礼物,当时,根本不知道那家伙在讲什么,以为又是在忽悠我(那家伙老干那事儿),就没怎么在意,后来他说了好几次,叫我回去拿。当然有些事,如果只是说一遍,可以不在意,当别人反复说的时候,那就不一样了,所以这个礼拜(也就是2007-12-8,礼拜六,北理工没有安排课),正好还有其它事,所以就回了一趟学校,然后去了登登那边呆了一会。他真给了我一个很大的礼物(一个圣诞老人),当时真是太感动了,感动到他姐太有心,对于几年前的随便说的一句话,居然能记在心上,而且这么久,还一直记得,在默默的两年后,给了我一个特大的惊喜,哎!太激动了。

感谢用心的姐姐,愿您工作顺利,永远年轻漂亮。

感谢多年的登登的真诚相待,愿登登永远阳光帅气,前途一遍光芒,和萌萌无论遇到什么困难,能够同甘共苦,携手并肩,快乐度过每一天。

愿你们的家人永远幸福。。

愿天下有心人永远快乐,幸福

机器人 2007-12-9 晚:23:07 (从朝阳回来后一个小时,超出睡觉时间7分钟)