PHP 死循环 来处理定时任务的效率是很低的。(众多网友评价)
大家都建议使用 Linux 内置的定时任务 crontab 命令来调用 php 脚本来实现。
PHP 定时任务的两种方法:
1、web 方式调用 php 网页,但是这样存在安全问题,外部用户同时也可以调用此文件。
- * /1 * * * * /usr / bin / wget - q - O temp.txt http: //wan.coolxap.cn/cron
2、用 php-cli 模式来调用 php 脚本,cli 是以一种命令行模式来执行 php 脚本
- * ****/usr/bin / php - f / root / test.php >> test.log
使用 crontab -e 添加任务,在 / var/spool/cron 下你可以看到一个 root 文件。
重启服务,使修改 生效
- service crond restart
crontab 最细的粒度是分钟,但可以起多个任务 + 休眠来达到模拟 以秒为单位的任务。
- * ****/bin/date >> /tmp/date.txt * ****sleep 10;
- /bin/date >> /tmp/date.txt * ****sleep 20;
- /bin/date >> /tmp/date.txt * ****sleep 30;
- /bin/date >> /tmp/date.txt * ****sleep 40;
- /bin/date >> /tmp/date.txt * ****sleep 50;
- /bin/date >> /tmp/date.txt
列举个真实场景:
- * /1 * * * * /usr / bin / wget--spider http: //wan.coolxap.cn/cron/closeinvalidlive
- 0 0 27 * */usr/bin / wget--spider http: //wan.coolxap.cn/cron/magicdistributed
- 0 0 26 * */usr/bin / wget--spider http: //wan.coolxap.cn/cron/guildassessment
- 0 0 27 * */usr/bin / wget--spider http: //wan.coolxap.cn/cron/guildprizestatement
当定时任务不起作用
定时任务,里面执行 php 脚本。
发现不能直接执行,需要切换到 www 用户来执行 php 脚本,
否则,脚本所做的操作都是以 root 的权限来执行的,比如创建文件目录 和 下载的图片都是属于 root 用户组。
直接导致到的问题是,web 网页用户由于权限不足就无法对该目录进行操作,比如 root 创建的目录,web 用户无法在该目录上传图片。
解决方案如下:
切换到 www 用户来执行命令
- su www "-c cd /alidata/www/wwwroot/17xap/e/caidiscuz/ && /aliyun/webserver/php5.2.17/bin/php pushnews2.php -9 -u"
另外解决图片下载时发现的一个解决问题的小技巧。
用接口的形式来访问某个 php 文件时,发现下载图片失败,提示权限不足 无法在该目录做图片存储操作。
然后检查目录的权限是 wr-wr-wr 0666,理论上是支持目录的读写。但为什么不能做图片下载操作呢?
因为没有 x 权限就无法在该目录下执行任何命令,包括 mkdir、ls 等。创建图片不仅需要 w 权限还需要 x 权限。
改为 wrx-r-xr-x 0755 权限后就能正常下载图片。
解决问题的技巧是先给足 0777 权限后,待问题解决了,确定是目录权限不足导致脚本无法正常运行的时候,再把目录的权限收回来,逐步提高权限。
来源: http://www.cnblogs.com/zhuojun/p/5797608.html