PHP结合Linux的cron命令实现定时任务
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权限后,待问题解决了,确定是目录权限不足导致脚本无法正常运行的时候,再把目录的权限收回来,逐步提高权限。
PHP结合Linux的cron命令实现定时任务的更多相关文章
- 使用cron命令配置定时任务(cron jobs)
原文 http://www.cnblogs.com/end/archive/2012/02/21/2361741.html 开机就启动cron进程的设置命令:chkconfig --add crond ...
- linux crontab 定时命令
一直认为Timer是比较好的实现定时器的方法,后来遇到在linux下的命令制定定时任务才发现,Timer的劣势所在,在Timer的时候很可能你的任务会被当做一个死程序被杀掉等等......上次一个同事 ...
- 定时任务 cron命令
一名linux新手,因为项目需要现在在学习linux操作系统. 因项目需要做一个定时任务,每个小时访问某一个url一次,通过参考很多大神的博客学会了crontab命令的使用方法 crontab -u ...
- Linux /etc/cron.d作用(转自 定时任务crontab cron.d)
原文链接:http://huangfuligang.blog.51cto.com/9181639/1608549 一.cron.d增加定时任务 当我们要增加全局性的计划任务时,一种方式是直接修改/et ...
- linux之cron定时任务介绍
前言 linux系统有一个专门用来管理定时任务的进程cron,一般是设置成开机自启动的,通过添加任务可以让服务器定时执行某些任务. cron介绍 linux系统有一个专门用来管理定时任务的进程cron ...
- linux中Cron定时任务系统命令详解
分类:Linux VPS教程 作者:阿川 发布时间:October 13, 2011 有很多同学在购买VPS之后,需要用到计划任务.但是又对计划任务不太了解,所以.今天我们的帮助中心主要是给大家提供一 ...
- 工作中常用的Linux命令:crontab命令,定时任务执行命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...
- Linux学习之路-Linux-at及cron命令【7】---20171215
Linux学习之路-Linux-at及cron命令[7]---20171215 DannyExia000人评论986人阅读2017-12-24 17:28:03 ntpdate 命令 [root@ ...
- Cron和Spring定时任务
1.Java Spring spring定时任务cronExpression的值(配置定时时间)格式说明: 一个cronExpression表达式有至少6个(也可能是7个)由空格分隔的时间元素.从左至 ...
随机推荐
- 可以ping通,浏览器打不开网页 - 解决办法
网络故障表现为: 1.电脑显示网络连接正常,DNS配置和hosts配置均正常 2.cmd可以ping通网址,域名 3.所有浏览器无法打开网页,有道云笔记置灰,微信二维码刷新失败 解决办法: 管理员权限 ...
- NSArray和NSMutableArray相互转换, 以及常用方法-备
有时候项目中NSArray和NSMutableArray需要相互转化,下面给出相关代码1.NSArray 1.1 转化:NSMutableArray 1 NSMutableArray *mutable ...
- linux中查找命令find、locate、whereis、which、type区别
linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...
- getResources().getXml()获取xml
获取XML文件的基本思路是,通过getResources().getXml()获的XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开头还是结尾,是某个标签的开始还是 ...
- 《Programming WPF》翻译 第8章 1.动画基础
原文:<Programming WPF>翻译 第8章 1.动画基础 动画包括在一段时间内改变用户界面的某些可见的特征,如它的大小.位置或颜色.你可以做到这一点,非常困难的通过创建一个tim ...
- jquery中table里面的tr里的input添加一行,并且第一列autoincrement
实现添加一行并且第一列由A0开始autoincrement,代码如下(在文件的同一个文件夹下添加一个jquery.js文件): <!DOCTYPE html PUBLIC "-//W3 ...
- Largest Rectangle in Histogram 解答
Question Given n non-negative integers representing the histogram's bar height where the width of ea ...
- Qt creator 搭配 valgrind 检测内存泄漏
继上次重载operator new检测内存泄漏失败之后,妥协了.决定不管是否是准确指明哪一行代码出现内存泄漏,只要告诉我是否有泄漏就行了,这样就没有new替换的问题.在开发中,总是一个个小功能的开发. ...
- jquery常用方法以及详解
$("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img").attr({src:"test.jpg", ...
- [Protractor] Locators and Suites in Protractor
HTML: <ul class="list"> <li ng-repeat="item in itmes" ng-click="se ...