在我们希望实现能定时运行一个程序,比如定时从某网站上爬取内容,定时计算某些内容,汇总相关内容后,代码写好之后,不至于总需要人为来执行该程序,我们希望能够实现其自动运行,不需要人为干预。
总结了如下两种方法:
第一种方法实现起来极为容易,将整个程序段用while(true)包含起来,并用sleep函数实现定时运行,如下所示:
while(true){
//待执行程序段
sleep(1000000);
}
此种方法本质是程序始终在执行,只不过等待时间运行而已,其“暂停”时刻,也在占用内存,对系统资源是一种浪费,因此此种方式并不是很推荐。
第二种方法,与程序段本身无关,我们需要做的,是对服务器的一个配置文件的修改,即让服务器定时自动运行某个程序,此种方式减少了资源浪费
先说明怎么实现的,然后说明原理
对于Linux服务器,命令如下:
先进入服务器定时任务配置文件
crontab -e
然后当我想定时执行reptile.php程序时,在该文件中末行输入如下语句
0 7-23 * * * /usr/bin/php /var/www/html/ReptileNews/reptile.php
/usr/bin/php 指的是服务器中php的环境位置,如果想运行java程序也可换成java的环境,后面也相应改成java文件了
每天7点到23点,每一个小时执行reptile.php程序
/usr/bin/php为我的服务器php环境所在目录,/var/www/html/ReptileNews/reptile.php是我的待执行程序详细路径
crontab文件格式
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
特殊字符
星号(*):代表所有可能的值,例如month字段如果是星号,则表示不论月,即每月
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次
回过头来看我的每天7点到23点,每一个小时执行reptile.php程序的定时任务语句,0分钟,7点到23点,不论天,不论月,不论周,执行程序,也就是每天7点到23点执行reptile.php程序
希望能有所帮助!