【发布时间】:2015-10-12 19:29:40
【问题描述】:
尝试(理论上)跟踪最后两行(-n 2)的日志文件,然后使用 if/then 语句继续。当然,这将是一个从 launchctl .plist 调用的脚本。
在我的脑海里基本上是这样的,虽然不对……
#!/bin/sh
last-entry= tail -n 2 command # show only last two lines of log file
if last-entry is less than (<) two lines, then
execute command here
fi
【问题讨论】:
-
如果文件少于两行,你想做什么?
-
是的。我对 tail 的理解是它一直在寻找新的条目,比如(保持活动触发器)? -- 少于两个是理想的,但是,如果只有一个新条目,我想运行一个命令。如果没有条目,则循环或(在我的情况下)我将创建一个 .plist 以使我的脚本保持活动状态。 [更新] 日志文件是 accountpolicy.log——如果是错误尝试,则打印一行,成功打印两行(总是重复时间码)。 :)
-
tail本身不会等待或循环。但是,tail -f(和其他相关选项)确实如此。也就是说,在这种情况下,您明确不希望这种行为。并且您测试的任何方式都会“竞争”再次写入的日志文件。该日志文件何时/多久更新一次? -
“种族”?请注意您的意思。为了回答您的问题,日志文件正在捕获(来自:apple's accountpolicy.log)“失败和成功”的登录尝试。除非我的计算机进入睡眠状态并且我需要登录我的帐户,否则日志文件很少更新。
-
或者其他人在您做某事时尝试登录到您的计算机(可能远程假设也登录到那里)。在这种情况下,“竞赛”意味着从检查文件内容到执行计划对文件内容执行的任何操作的时间之间可能发生了变化,请参见 TOCTOU 和 on wikipedia 例如。你在这里的最终目标是什么?
execute command here实际上会做什么?
标签: macos if-statement grep tail logfile