问题是这样的,代码如下:
ignore_user_abort();
set_time_limit(0);
$interval=300;
do{
sleep($interval);
$file1 = date("Y-m-d",time()).'.txt';
$content=file_get_contents($file1);
$fp = fopen($file1, 'w');
$content .= "\r\nstart".date("Y-m-d H:i:s",time());
fwrite($fp, $content);
fclose($fp);
}while(true);
线上的环境是 nginx php5
这个会每隔两天左右,也没有固定值,然后 log 会断,然后查询线上的 nginx 的 error.log 和 php5 的的 error.log 都没有错误记录
我应该如何调试?
1
lianz 2016 年 7 月 12 日
极可能是文件内容过大,超出内存限制了。
file_put_contents 只适合小文件,写 log 的话该换 append fwrite 了 |
2
gdtv 2016 年 7 月 12 日 via Android
代码里去掉循环,弄个 crontab 定时执行,会不会好些?
|
3
xujif 2016 年 7 月 12 日
file_put_contents 本身就有 flag 参数可以指定为 append 不需要读出来再写。 没有 log 的话看看有没有 core 文件,可能就是崩掉了
|
4
pubby 2016 年 7 月 12 日
为啥要全部读出来,你只是在文件最后加点东西而已。
直接 file_put_contents($file,"\r\nstart".date("Y-m-d H:i:s",time()),FILE_APPEND) 就行了 如果这个脚本可能会有多个运行实例,最好用 FILE_APPEND | LOCK_EX |
5
william23 OP |
7
Grant06 2016 年 7 月 12 日
php xxxxx.php > 日志文件
|
8
hl 2016 年 7 月 12 日
装个监控吧兄弟
|
10
rekulas 2016 年 7 月 12 日
php 常驻本身就不稳定,你这逻辑这么简单,建议用 shell 或者 java 或者 c
比如最简单的开个 screen ,写个 shell 每秒请求一下搞定,缺点是重启就没了 其实用 java 或 c 一下午就写出来了 即使没基础 有基础几分钟 |
11
kookxiang 2016 年 7 月 12 日
会不会是内存炸了被怼了?
|