欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Linux下如何定时执行php脚本?linux下的Crontab定时服务

shiping1 的头像

Linux下如何定时执行php脚本?linux下的Crontab定时服务

Linux下如何定时执行php脚本?

键入 crontab  -e 编辑crontab服务文件

------------------------------------------Ubuntu中的linux---------------
安装lynx包:apt-get isntall lynx
先写ln.sh脚本:lynx http://10.11.12.49/data_task.php

设置定时:crontab -e
0 1 * * * bash /var/www/test/ln.sh
-------------------------------------------------------------------------
分为两种情况:
第一种情况:你的php脚本中没有引入其他PHP文件,也就是说没有include,require_once等命令的PHP文件
* */1 * * * /usr/local/php/bin/php  /var/www/html/wwwroot/web/script.php (每一小时执行一次script.php)
注意,这样写需要把PHP变成可执行的脚本文件。在命令行下,脚本所在目录
chmod +x script.php
注意:你的script.php文件中一定要在开始处加上: #!/usr/local/php/bin/php -q ,下面是一个完整的script.php文件代码

01<?php
02#!/usr/local/php/bin/php -q
03session_start();
04define( "DB_PASSWORD", "111111" ); // 服务器登陆密码
05define( "DB_NAME", "db_shopping" ); // 数据库名称
06define( "DB_USER", "root" ); // 服务器登陆用户
07define( "DB_HOST", "127.0.0.1" ); // 服务器IP地址或名称
08define( "DB_PORT", "3306" ); // 服务器登陆端口号
09define( "DB_CHARSET", "utf8" ); // 数据库默认语言
10define( "DB_DEBUG", false ); // 是否设置为调试模式
11define( "DB_CLOSE", false ); // 是否主动关闭数据库连接
12$con=mysql_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASSWORD);
13mysql_query ( "SET character_set_connection = ".DB_CHARSET.", character_set_results = ".DB_CHARSET.", character_set_client = binary");
14if (!$con) die("Mysql Error:".mysql_error());
15mysql_select_db(DB_NAME,$con);
16//$dates=date()
17$sqll="insert into test(NAME,Sex,thisdate,state) values('love','0','2011-08-11','1')";
18$resl=mysql_query($sqll);
19echo "成功...";
20?>

/usr/local/php/bin/php的意思是:用/usr/local/php/bin/目录中的php.exe文件来执行 /var/www/html/wwwroot/web/script.php

第二种情况:你的php脚本中有引入其他PHP文件,也就是说有用到include,require_once命令的PHP文件(先写shell脚本)
上面的方法有一个问题:当script脚本中有include文件时,脚本根本找不对PHP的路径,php将会在/bin/local/php目录下找文件,当然找不到。
所以,遇见这种情况,按照下面的方法做:
在终端上输入如下命令得到sh 和 lynx 程序的路径:
whereis sh
whereis lynx
or
which sh
which lynx
随便输入一个,其中便会返回你要的路径。如果你的系统里没有lynx,试试links,w3m,或者 links2,这些是其它的文本模型浏览器。这些浏览器将会运行你的脚本。
然后你需要创建一个sh文件,用它来调用php文件,通过lynx。假设你的服务器已经安装了lynx,sh路径为 /bin/sh,lynx路径为 /usr/local/bin/lynx

#!/bin/sh
/usr/local/bin/lynx -source http://www.yoursite.com/folder/script.php

注意感叹号
把这个脚本保存为cron-lynx.sh
保存到一个你找得到的地方,比如:

你可以把它放在网站根目录。
然后再创建一个script.php的文件。当cron运行的时候,将会通过lynx来调用它。这个文件可以通过浏览器来访问。

然后编辑主机的crontab,像下面这样。
*/1 * * * *  /usr/www/yourdirectory/sh_scripts/cron-lynx.sh
在/bin/sh 和 /usr 间有空格。就这样就设好了,还有一点要注意的是,你的sh文件和php文件都正确无误。

关于linux下的定时服务,你可以移步《Linux中crond服务与crontab用法教程》。

来自    http://ituibar.com/how-to-execute-the-php-script-regularly-under-linux-linux-under-the-crontab-servi...


linux下定时执行php脚本

PHP是服务器端的脚本语言,如果想定时执行某些程序的话却没有很方便的办法。
在Linux服务器下的crontab可以稳定的做到定时执行PHP脚本。

crontab 是用来让使用者在固定时间或固定间隔执行程序之用
在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。
以某一频率执行任务
linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
cron的调度文件有以下几个:

1. crontab
2. cron.d
3. cron.daily
4. cron.hourly
5. cron.monthly
6. cron.weekly

如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。
示例:
每隔一分钟执行一次脚本 /opt/bin/test-cron.sh
可以在cron.d新建脚本 echo-date.sh
内容为
*/1 * * * * root /opt/bin/test-cron.sh

执行PHP脚本

方法1
如果你想定时执行某一个PHP脚本 可以直接这样写:
*/1 * * * * root -q /bin/local/php /path/to/your/php/script.php (每一分钟执行一次script.php)
注意,这样写需要把PHP变成可执行的脚本文件。在命令行下,脚本所在目录
chmod +x script.php

方法2
上面的方法有一个问题:当script脚本中有include文件时,脚本根本找不对PHP的路径,php将会在/bin/local/php目录下找文件,当然找不到。
所以,遇见这种情况,按照下面的方法做:
在终端上输入如下命令得到sh 和 lynx 程序的路径:
whereis sh
whereis lynx
or
which sh
which lynx
随便输入一个,其中便会返回你要的路径。如果你的系统里没有lynx,试试links,w3m,或者 links2,这些是其它的文本模型浏览器。这些浏览器将会运行你的脚本。
然后你需要创建一个sh文件,用它来调用php文件,通过lynx。假设你的服务器已经安装了lynx,sh路径为 /bin/sh,lynx路径为 /usr/local/bin/lynx
#!/bin/sh
/usr/local/bin/lynx -source http://www.yoursite.com/folder/script.php
注意感叹号
把这个脚本保存为cron-lynx.sh
保存到一个你找得到的地方,比如:

你可以把它放在网站根目录。
然后再创建一个script.php的文件。当cron运行的时候,将会通过lynx来调用它。这个文件可以通过浏览器来访问。

然后编辑主机的crontab,像下面这样。
*/1 * * * * root /bin/sh /usr/www/yourdirectory/sh_scripts/cron-lynx.sh
在/bin/sh 和 /usr 间有空格。就这样就设好了,还有一点要注意的是,你的sh文件和php文件都正确无误。

例子1

[b]在linux下定时执行PHP脚本[/b]
按正常的方式写PHP
$file = '/htdocs/www/b100/egspace/Bin/test/'.date('H').'-'.date('i').'-'.date('s').'.txt';
file_put_contents($file,date('Y-m-d'));
?>
把PHP文件属性改为shell文件:
chmod +x test.php
再编辑crontab:
crontab -e
加上一行:
     */1 * * * * /usr/local/bin/php -q /htdocs/www/b100/egspace/Bin/test.php
(在 安装PHP的时候,会产生一个可执行文件,文件名为php, 将它copy 到 /usr/local/bin下;注意到 PHP 原本是应用在网页应用的﹐因此它内定会送出 HTML 的HEADER﹐但 是在此我们是要将 PHP 用作 Shell Script﹐"-q" 就是表示不要送 出HEADER 的意思.你可以试试看不加上 -q 的显示结果。)

注:cron秒来执行程序

crontab -e
* * * * * /bin/date >>/tmp/date.txt
* * * * * sleep 20; /bin/date >>/tmp/date.txt
* * * * * sleep 40; /bin/date >>/tmp/date.txt

2.检查结果
tail -f /tmp/date.txt

来自 http://www.cnblogs.com/hujiong/archive/2012/12/15/2820028.html
普通分类: