我写好a.php了,要用crontab -e加任务了,回车后怎么显示这样的,没有crontab,在任意空白地方输入*/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php吗,问清楚一点先: ===================================no crontab for root - using an empty one
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Type :quit<Enter> to exit Vim
http://cn.php.net/manual/en/features.connection-handling.php
http://cn.php.net/manual/en/function.ignore-user-abort.php另外你的这种做法不太好,一般的做法是写个脚本,通过计划任务来运行。类unix的计划任务一般crontab来实现。
好像用exec、system等命令运行程序试一下。楼主也可以试一下在操作系统下搞个计划会怎样。
http://cn.php.net/manual/en/features.connection-handling.php
http://cn.php.net/manual/en/function.ignore-user-abort.php另外你的这种后台脚本,应该通过crontab来运行,而不是在web运行。
1 1 * * * /usr/local/bin/php a.php
的意思是每天的凌晨1点零1分执行/usr/local/bin/php a.php
楼主看看这个就明白了
http://cn2.php.net/manual/zh/features.commandline.php
然后你应该了解路径的概念,例如a.php,指得是当前路径下的a.php。
最后shell> /usr/local/bin/php a.php。这行命令的意思,就是用/usr/local/bin/php去执行a.php这个脚本。命令行脚本的另外一个使用方式,是在脚本的头部加入#!/usr/local/bin/php这样的指令。当然这个你可以暂时忽略了。而且我个人感觉这种方式不是很好,因为php安装的路径还没有一个标准,不像#!/bin/sh。
还有如果一定要把a.php放在/usr/local/bin/php目录下才能运行,那么a.php里include_once的文件不是包含不过来了?因为那些文件都是在网站目录里的,跟/usr/local/bin/php不在同一个目录。
2) /usr/local/bin/php不是目录,是一个命令,这个命令是用来执行php脚本的。
3) 你在web环境运行一个php脚本,实际上也类似于调用了一个/usr/local/bin/php去运行你的PHP脚本。只不过web环境里的/usr/local/bin/php有可能是做成了webserver的模块。原理是一样的。
4)定时执行,我上面提到的crontab,是系统提供的,不是php。
这样吧,你回答我,你是否有shell login权限,或者只是一个虚拟主机?如果没有shell login权限,马上抛弃“命令行实现”这种想法吧。
只要发出请求就行了,而不论这个请求是如何发出的这是http的基本原理
web server-》调用php解释器-》解释器解释并执行PHP脚本,返回结果给web server-》web server把结果发送给用户浏览器命令行是这样的。
shell-》调用php解释器(例如我上面提到的/usr/loca/bin/php)-》解释器解释并执行PHP脚本,返回结果给shell-》shell把结果输出到终端定时执行(crontab)是这样的。
crond-》调用一个crontab策略文件-》看到有/usr/local/bin/php a.php,于是这里开始回到上面的命令行的情况。
而这个crontab策略文件,可以通过命令crontab -e来编辑。格式如下:
1 1 * * * /usr/local/bin/php a.php
5个时间栏,分别是分,时,天,周,月,最后是要执行的命令,不一定是PHP,也可能是其他程序。
test.php的代码(不知道是不是这样,还没测试):
#!/usr/local/bin/php
/usr/local/bin/php /root/wwwroot/test/a.php
进去之后是处于常规模式,常规模式你目前只需要了解如下操作:
:w保存
kjhl上下左右
:q退出
:wq保存并退出
i进行编辑模式编辑模式只需要记住一个操作,esc键。这个命令退出编辑模式,返回常规模式。
说实话,我第一次听说crontab,我得查查crontab是怎么个用法,(:
如果用crontab,那我就不用写个test.php了,也不用在php里加#!/usr/local/bin/php了,直接就用crontab定时执行a.php就行了吗?
2)输出which php,看看输出是什么,/usr/local/bin/php只是一种可能的情况,还有可能是/usr/bin/php等
3)输入crontab -e,回车。把*/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php输入进去,保存,退出。记住,这里的“/usr/local/bin/php”只是一种可能性,不一定是这个,要看which php的输出。
4)上面的*/1表示每分钟后台执行一次,等结果吧。
1)你ssh登录到服务器上。
2)输出which php,看看输出是什么,/usr/local/bin/php只是一种可能的情况,还有可能是/usr/bin/php等
3)输入crontab -e,回车。把*/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php输入进去,保存,退出。记住,这里的“/usr/local/bin/php”只是一种可能性,不一定是这个,要看which php的输出。
4)上面的*/1表示每分钟后台执行一次,等结果吧。
=========
好祥细,我which php了,是/usr/local/bin/php,/root/wwwroot/test/a.php是我网站的网页路径。
crontab -e还没试,要写好a.php让它可以输出结果保存起来别再试,不过我懂得用了,
另外如果主机重启原来crontab -e的任务会不会没有了?要重写再crontab -e一次吗?
还有如果我不要了,我怎么取消crontab -e这个任务,
有没有可能在php网页里取消这个定时任务呢?因为这样可以在网站后台取消,不用登录ssh,这样让其他人也能够取消。
===================================no crontab for root - using an empty one
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
Type :quit<Enter> to exit Vim
输入内容
按键盘的esc退出到普通模式
依次按:wq保存并退出,注意":"是"shift+;"
因为在web运行,你的当前目录是脚本所在目录。而crontab运行的时候,当前目录是你的用户的home目录。如果代码涉及到目录,那么有可能无法运行。例如include或者fopen之类。如果“/usr/local/bin/php /root/wwwroot/test/a.php”出现错误,可以改成“cd /root/wwwroot/test;/usr/local/bin/php a.php”
crontab.21874
/f25bdc501e
/code
/DaemonPortOptions
/3 * * * * /usr/local/bin/php /root/wwwroot/test/a.php
/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php
/
/~
[Command Line] =========
变成这样了啊,刚开始搞了一个3分钟的,不会保存断掉ssh重来,再搞个1分钟的就变成2个了,怎么取消一个?这样算保存了吗?接下来怎以么退出?