V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SharkIng
V2EX  ›  问与答

[SHELL] 如何在不使用 tail -f 以及 While 等 Block loop 的时候逐行读取某 Log 文件的最后 N 行?

  •  
  •   SharkIng · 2016-08-08 12:46:02 +08:00 · 1748 次点击
    这是一个创建于 3005 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在做法是 tial -f | while read line. 但是同事说这样不太好,因为这个 Script 需要基本上每 1 个小时运行一次,读取一个 Log 文件然后判断最后 5 行包不包含某程序运行结束的记录

    求解
    9 条回复    2016-08-11 10:56:40 +08:00
    beyond_st
        1
    beyond_st  
       2016-08-08 13:15:51 +08:00
    你这个因为并不能解释为什么不太好。
    27
        2
    27  
       2016-08-08 13:27:05 +08:00
    tail -n 5 file 不行?
    ryd994
        3
    ryd994  
       2016-08-08 13:28:02 +08:00 via Android
    看不出有什么不好
    uuspider
        4
    uuspider  
       2016-08-08 13:29:59 +08:00
    tail 不加-f ,使用 crontab ,你同事是不是这个意思?
    Fedor
        5
    Fedor  
       2016-08-08 22:17:42 +08:00
    @27 LZ 的意思应该是当文件内容有更新的时候, 依然是最后的 N 行.
    SharkIng
        6
    SharkIng  
    OP
       2016-08-08 23:16:49 +08:00
    @beyond_st
    @ryd994
    我的理解是 while 容易进入死循环种种,说实话我也不知道为什么不好


    @Fedor 对,是需要这样
    @uuspider 同时一再强调不能用 loop ,这个才是蛋碎的地方
    DravenJohnson
        7
    DravenJohnson  
       2016-08-09 03:22:29 +08:00
    python:
    ```
    files = reversed(open(LOGFILE, 'r').readlines()[-10:])
    for line in files:
    jsons = json.loads(line)
    ```
    uuspider
        8
    uuspider  
       2016-08-10 19:18:15 +08:00
    @SharkIng 直接用 grep 吧。
    SharkIng
        9
    SharkIng  
    OP
       2016-08-11 10:56:40 +08:00
    @uuspider 因为是多行处理, Grep 好像没办法做到要求,最后用 Python 写了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:22 · PVG 03:22 · LAX 12:22 · JFK 15:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.