最新消息: 新版网站上线了!!!

Linux--PHP脚本的计划任务

crontab -e
输入:
*/6 * * * * wget http://xxxxxxx/bjair/getRemoteData.php
保存退出
重启crond服务:
service crond restart
另外,要将要执行的代码的用户组和用户都改成:wwww
此处为:
chgrp -R www bjair
chown -R www bjair
这样的话,权限就得设定一下了,以免别人瞎弄:
chmod -R 775 bjair
 
这里设定的是 6 分钟执行一次。
具体其它时间的组合这里不列出了。
而且这种方法是用 wget 去访问脚本,不是用 php 来执行。算是一种较笨的办法吧。不过功能上倒是实现了。
 
默认情况下上面的代码是以 root 身份执行的。但实际上,上面的代码我们更希望它以 www 身份运行。所以我们上面的代码要改成:
crontab -u www -e;
然后再继续。
要看某用户有多个个计划任务:
crontab -u www -l
 
另一种用让PHP以脚本方式运行:
按正常的方式写PHP,然后在第一行前加一行"#!/usr/local/bin/php -q" 这里要指向本机PHP的安装目录,如果不知道。可以通过:find / -type f -name 'php' 来查找。
#!/usr/local/bin/php -q
<?
$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
或:chmod 755 test.php
再编辑crontab
crontab -e
或:crontag -u www -e
加上一行
*/1 * * * * /htdocs/www/b100/egspace/Bin/test.php
实验证明,如果在文件最前面不加那一句话:#!/... -q 也是可以的.不过,在计划任务中得如下写:
 
*/1 * * * * /usr/bin/php /htdocs/www/b100/egspace/Bin/test.php
通常会碰到的问题有:
1.没有执行的权限。通过 chmod 改变文件的权限,或对文件所属用户进行计划任务的设置。
 
2.文件没有执行权限。通过 chmod +x filename 为文件加上执行权限。
 
3.如果要在文件中对其他文件进行写,删除等操作,要将目标文件的权限进行相应的设置。
 
4.环境变量的问题。最隐藏的问题。用crontab来执行php,是不走apache,nginx,所以$_SERVER,$_ENV这类变量根本用不了。所以检查一下php代码中有没有这类变量,如果有,拿掉。
 
5.php的相对路径问题.如:
include_once'./mysql.php';  
当php代码中,用的是相对路径时,只有进入到那个目录下执行/usr/local/php/bin/php /var/www/cron/level_rank.php才能生效。解决方法如下:
*/10 * * * * cd /var/www/cron && /usr/local/php/bin/php /var/www/cron/level_rank.php  
或者在php代码中用绝对路径.
 
附:
可以查看 crond 的日志文件来了解失败的原因,默认情况下日志文件是:/var/logs/crond 
也可以为某个计划任务指定日志输入文件。例如:
*/10 * * * * /usr/local/php/bin/php /var/www/cron/del_redis.php >> /home/wwwlogs/del.log  

转载请注明:谷谷点程序 » Linux--PHP脚本的计划任务