问题是这样的,代码如下:
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-07-12 12:18:04 +08:00
极可能是文件内容过大,超出内存限制了。
file_put_contents 只适合小文件,写 log 的话该换 append fwrite 了 |
2
gdtv 2016-07-12 12:22:48 +08:00 via Android
代码里去掉循环,弄个 crontab 定时执行,会不会好些?
|
3
xujif 2016-07-12 12:31:42 +08:00
file_put_contents 本身就有 flag 参数可以指定为 append 不需要读出来再写。 没有 log 的话看看有没有 core 文件,可能就是崩掉了
|
4
pubby 2016-07-12 12:38:26 +08:00
为啥要全部读出来,你只是在文件最后加点东西而已。
直接 file_put_contents($file,"\r\nstart".date("Y-m-d H:i:s",time()),FILE_APPEND) 就行了 如果这个脚本可能会有多个运行实例,最好用 FILE_APPEND | LOCK_EX |
5
william23 OP |
6
william23 OP @gdtv 你说的的确是这样子好些,现在只是暂时这样子,如果没有排查出来的话,我想下次就直接用 crontab 了。
|
7
Grant06 2016-07-12 14:25:17 +08:00
php xxxxx.php > 日志文件
|
8
hl 2016-07-12 14:33:49 +08:00
装个监控吧兄弟
|
10
rekulas 2016-07-12 15:54:59 +08:00
php 常驻本身就不稳定,你这逻辑这么简单,建议用 shell 或者 java 或者 c
比如最简单的开个 screen ,写个 shell 每秒请求一下搞定,缺点是重启就没了 其实用 java 或 c 一下午就写出来了 即使没基础 有基础几分钟 |
11
kookxiang 2016-07-12 17:20:48 +08:00
会不会是内存炸了被怼了?
|