如何跟踪一个特定文件的活动

如何跟踪一个特定文件的活动

我目前已在其中一台服务器上部署了 MAAS。这一切都有效(大多数时候)。现在我在 MAAS 的 WOL 文件中添加了一些行 (/etc/maas/templates/power/ether_wake.template)。我想向该文件添加一些功能。

我首先制作了一个 bash 脚本来了解一切是否正常工作,在修复了一些错误之后,它确实正常工作。之后,我将其添加到 WOL 文件中。从那时起,它就不再起作用了。好吧,我对 bash 脚本或其他东西并不陌生,但我不知道如何调试。当我查看错误日志时,我看不到与该文件相关的任何内容,这给了我某种提示,说明它是否出错了。因此,我有兴趣知道是否有某种 CLI 工具可以在一段时间内跟踪该特定文件的输出?这可能吗?总的来说,我是否以正确的方式解决这个问题?

答案1

一个“CLI 工具,可以遵循该特定文件的输出在一段时间内”将是tail --follow=name --retry filename。它将在添加文件时打印行,并且如果文件被删除并重新创建,将从文件的开头读取,但不幸的是,如果文件被删除,它可能会丢失行被截断的。测试1:

终端 1(注意它不打印bar):

$ tail --follow=name --retry test.log
tail: cannot open 'test.log' for reading: No such file or directory
tail: 'test.log' has appeared;  following new file
foo
tail: 'test.log' has become inaccessible: No such file or directory
tail: 'test.log' has appeared;  following new file
baz

2 号航站楼:

$ echo foo > test.log
$ echo bar > test.log
$ rm test.log
$ echo baz > test.log

测试 2,终端 1:

$ rm test.log
$ tail --follow=name --retry test.log
tail: cannot open 'test.log' for reading: No such file or directory
tail: 'test.log' has appeared;  following new file
1
2
tail: test.log: file truncated
3
4

2 号航站楼:

$ echo 1 > test.log
$ echo 2 >> test.log
$ echo 3 > test.log
$ echo 4 >> test.log

如果你想尝试遵循 a 的输出命令您需要将该命令的标准输出(可能还有标准错误)连接到某物- 终端(只需运行命令)、文件 ( command > my.log 2>&1) 或另一个命令 ( command 2>&1 | tail -f)。

相关内容