V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
william23
V2EX  ›  PHP

求教:线上环境的一个方法每隔两天左右会断,而且没有 log 可查,怎么办?

  •  
  •   william23 · 2016-07-12 12:00:10 +08:00 · 2523 次点击
    这是一个创建于 3057 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题是这样的,代码如下:

    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 都没有错误记录 我应该如何调试?

    13 条回复    2016-07-13 14:34:13 +08:00
    lianz
        1
    lianz  
       2016-07-12 12:18:04 +08:00
    极可能是文件内容过大,超出内存限制了。
    file_put_contents 只适合小文件,写 log 的话该换 append fwrite 了
    gdtv
        2
    gdtv  
       2016-07-12 12:22:48 +08:00 via Android
    代码里去掉循环,弄个 crontab 定时执行,会不会好些?
    xujif
        3
    xujif  
       2016-07-12 12:31:42 +08:00
    file_put_contents 本身就有 flag 参数可以指定为 append 不需要读出来再写。 没有 log 的话看看有没有 core 文件,可能就是崩掉了
    pubby
        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
    william23
        5
    william23  
    OP
       2016-07-12 13:01:51 +08:00
    @lianz
    @xujif
    @pubby
    你们说的是有这个可能性,我会排查的,但是这只是个 demo ,这个情况其实还有一个版本,是插入到数据库的,然后作为 log ,但是也是会断,网上的资料是说应该是某一处产生了报错,但是我 try catch 捕获不到这个错误
    william23
        6
    william23  
    OP
       2016-07-12 13:03:01 +08:00
    @gdtv 你说的的确是这样子好些,现在只是暂时这样子,如果没有排查出来的话,我想下次就直接用 crontab 了。
    Grant06
        7
    Grant06  
       2016-07-12 14:25:17 +08:00
    php xxxxx.php > 日志文件
    hl
        8
    hl  
       2016-07-12 14:33:49 +08:00
    装个监控吧兄弟
    william23
        9
    william23  
    OP
       2016-07-12 15:06:20 +08:00
    @Grant06 这个日志文件是空的
    rekulas
        10
    rekulas  
       2016-07-12 15:54:59 +08:00
    php 常驻本身就不稳定,你这逻辑这么简单,建议用 shell 或者 java 或者 c

    比如最简单的开个 screen ,写个 shell 每秒请求一下搞定,缺点是重启就没了

    其实用 java 或 c 一下午就写出来了 即使没基础 有基础几分钟
    kookxiang
        11
    kookxiang  
       2016-07-12 17:20:48 +08:00
    会不会是内存炸了被怼了?
    Grant06
        12
    Grant06  
       2016-07-12 18:58:17 +08:00
    @william23 报错才会有输出
    william23
        13
    william23  
    OP
       2016-07-13 14:34:13 +08:00
    @Grant06 是啊,就是没报错,但是断了,就搞不懂了,每次记录的 log 位置都不一样,无从查证啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2994 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:53 · PVG 20:53 · LAX 04:53 · JFK 07:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.