(推荐)原创,在linux内核的系统中使用crontab 命令执行php文件的实

2017-01-18 09:49:05

原创,在linux内核的系统中使用crontab 命令执行php文件的实

有这么样的需求,一个Php文件需要定时执行?那么如何定时执行呢,这要分两种平台说话,一种是Windows操作系统,另一种就是以Linux为 内核的系统,如Red Hat linux,sentos等,但作者我认为Windows平台中基本好办,一个计划任务就能搞定,但在linux中也有类似于计划任务的功能,那就是 crontab命令,因为linux使用的用户相对少些,所以本文也就以linux 中的crontab来讲讲定时执行一个php文件的方法...PHP是服务器端的脚本语言,如果想定时执行某些程序的话却没有很方便的办法。当然,这也分 为两种情况:

第一种情况:你的php脚本中没有引入其他PHP文件,也就是说没有include,require_once命令的PHP文件
如果你想定时执行某一个PHP脚本 可以直接这样写:
*/1 * * * * /usr/local/php/bin/php /path/to/your/php/script.php (每一分钟执行一次script.php)
注意,这样写需要把PHP变成可执行的脚本文件。在命令行下,脚本所在目录
chmod +x script.php
注意:你的script.php文件中一定要在开始处加上: #!/usr/local/php/bin/php -q 哟,下面是一个完整的script.php文件代码

#!/usr/local/php/bin/php -q
session_start();
define( "DB_PASSWORD", "111111" ); //
服务器登陆密码
define( "DB_NAME", "db_shopping" ); // 数据库名称
define( "DB_USER", "root" ); // 服务器登陆用户
define( "DB_HOST", "192.168.0.110" ); // 服务器IP地址或名称
define( "DB_PORT", "3306" ); // 服务器登陆端口号
define( "DB_CHARSET", "utf8" ); // 数据库默认语言
define( "DB_DEBUG", false ); // 是否设置为调试模式
define( "DB_CLOSE", false ); // 是否主动关闭数据库连接
$con=mysql_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASSWORD);
mysql_query ( "SET character_set_connection = ".DB_CHARSET.", character_set_results = ".DB_CHARSET.", character_set_client = binary");
if (!$con) die("Mysql Error:".mysql_error());
mysql_select_db(DB_NAME,$con);
//$dates=date()

//-----读取系统管理员的密码
$sqll="insert into test(NAME,Sex,thisdate,state) values('love','0','2011-08-11','1')";
$resl=mysql_query($sqll);
echo "成功...";
?>


/usr/local/php/bin/php的意思是:用/usr/local/php/bin/目录中的php.exe文件来执行 /path/to/your/php/script.php,注意,都是相对于 ~来指定路径的。。。

第二种情况:你的php脚本中有引入其他PHP文件,也就是说有用到include,require_once命令的PHP文件
上面的方法有一个问题:当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

发表评论:

Powered by PHP 学习者(mail:517730729@qq.com)

原百度博客:http://hi.baidu.com/ssfnadn

备案号:闽ICP备17000564号-1

开源中国 PHPCHINA