网页关掉后程序还会继续运行吗?

BILLSSJONE 2009-01-19 07:24:08
想在首页做个触发器,就是打开首页,里面有ajax调用另一个处理某些数据的网页a.php,a.php运行结束需要十秒左右时间,
那么有用户打开首页后就触发a.php,当用户很快关掉首页后,还没执行完的a.php里的程序还会继续执行吗?
大家有什么好方法在apache服务器怎么做过触发器在后台运行程序的?
...全文
1229 76 打赏 收藏 转发到动态 举报
写回复
用AI写文章
76 条回复
切换为时间正序
请发表友善的回复…
发表回复
surfchen 2009-01-20
  • 打赏
  • 举报
回复
我在上面43楼的时候已经提到过了这个问题,你都不注意看。
surfchen 2009-01-20
  • 打赏
  • 举报
回复
又或者在[root@ud2556 root]#下输入这个命令看看有什么
cat ~/text.txt
surfchen 2009-01-20
  • 打赏
  • 举报
回复
$file='text.txt';改成$file=dirname(__FILE__).'/text.txt';或者$file='/tmp/text.txt';
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
我是每运行一次a.php就把当前时间写入test.txt文件里,累加写入的,现在都过1分钟了test.txt没变化,(:
成功保存后任务就生效了吗?还要做些什么,要重启什么不?
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
退出后再用crontab -e就不是空的了,可以看到有一条任务,
等结果看看成功不,看看有没有隔1分钟就输出内容到我的test.txt文件里,
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
太感动了,终于保存到一条crontab任务了,原来没有在i的环境里就粘帖上去。
surfchen 2009-01-20
  • 打赏
  • 举报
回复
它叫你Type :quit <Enter> to exit Vim
输入:quit回车,而不是叫你输入回车。
:q就是:quit的简写
surfchen 2009-01-20
  • 打赏
  • 举报
回复
这时候应该按:q或者:wq,而不是回车
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
我又想退出,按ctrl+c出现:
Type :quit<Enter> to exit Vim
然后按回车退不出,按一次电脑就“咚”地响一次
surfchen 2009-01-20
  • 打赏
  • 举报
回复
前面有星号。

你要先i进入编辑模式,再粘贴。
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
我断掉重来,刚才的应该没保存到,我又做了一次,
/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php
*/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php
上面哪个正确?*/1前面有个*号的吗?输不进,直接复制上去没*号显示,然后就:w保存,出现下面情况:
============
~
~
~
~
~
~
~
E486: Pattern not found: 1 * * * *
surfchen 2009-01-20
  • 打赏
  • 举报
回复
你居然进入了这个ex编辑模式,按ctrl+c退出,然后按q!退出
surfchen 2009-01-20
  • 打赏
  • 举报
回复
先esc,然后再:q!
ziqing_deshi 2009-01-20
  • 打赏
  • 举报
回复
学习。。。
yctin 2009-01-20
  • 打赏
  • 举报
回复
好长的帖...顶一下
frederic_zhao 2009-01-20
  • 打赏
  • 举报
回复
好辛苦啊!
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
是的,我也想到要用绝对路径做个测试,也有定义整个根目录的常量,看来现在不但可以定时发邮件,还可以再做个定时备份mysql,以前一直是人手进后台备份,太谢谢了。
surfchen 2009-01-20
  • 打赏
  • 举报
回复
不是不能include,而是你要正确地include。

一个足够健壮的程序,无论在什么环境下,都可以正常运行的。

例如:
include 'db.php';

include dirname(__FILE__).'/db.php';

后面一个就比前面一个要健壮。前面这个有什么问题呢?假设目录结果是这样:
/wwwroot/test.php
/wwwroot/db.php

假设test.php里include db.php。

如果我的当前路径是/wwwroot,include 'db.php'是没问题的。因为程序内部会提问db.php为/wwwroot/db.php。
但是如果我的当前路径是/home/surf,通过/usr/local/bin/php /wwwroot/test.php执行,那么include 'db.php'就会去调用/home/surf/db.php。

也就是说,程序内部会把db.php前面加上当前目录。

如何避免这个情况,答案就是使用绝对路径。include dirname(__FILE__).'/db.php';就是一个使用绝对路径的例子。dirname(__FILE__)返回的是test.php所在目录。不过在大型系统的开发里,一般会定义一个常量作为整个程序的根目录。例如:
define('MY_ROOT','/wwwroot');
include MY_ROOT.'/db.php';。

希望你能明白。其实这些东西你以后也会遇到的,当然csdn这种地方,很少会有人跟你说这些。另外我有个建议,就是以后在CSDN看到别人回答你的问题,最好抱着怀疑的态度。这里的回答,很多都是看似正确,实则有误。
BILLSSJONE 2009-01-20
  • 打赏
  • 举报
回复
等我总结一下步骤:

时间表示语法:
* * * * * (5个时间栏,分别是分,时,天,周,月)
例:
*/2 * * * * 每隔2分钟执行
1 2 * * * 每天的2点1分执行(前面不用*/吗?)


1)你ssh登录到服务器上。
2)输出which php,看看输出是什么(得到自己服务器的php解释器位置),如/usr/local/bin/php
3)输入crontab -e,回车。把*/1 * * * * /usr/local/bin/php /root/wwwroot/test/a.php输入进去,保存,退出。

注:用crontab -e进去后是vim界面的普通莫式不能输入和粘贴第一个*号(我在这里吃了大亏),要输入i进入编辑模式再粘贴或写任务(按esc可返回普通模式),
写完了输入“:w”保存,看到“crontab.8129" 2L, 79C written”就成功保存了,然后输入“:q”退出


4)上面的*/1表示每分钟后台执行一次,等结果吧。

netehoney 2009-01-20
  • 打赏
  • 举报
回复
mark
加载更多回复(56)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧