
问题是这样的,代码如下:
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 = fope($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 会不会是内存炸了被怼了? |