【问题标题】:Linux, check if a temporary file gets created then deletedLinux,检查是否创建了临时文件然后删除
【发布时间】:2017-06-14 08:52:52
【问题描述】:

我正在尝试在 Django 应用程序上使用 wkhtmltopdf 在我的服务器上调试问题。

为运行 wkhtml 而生成的命令指向 /tmp/ 中的一个文件。

wkhtmltopdf.sh --encoding utf8--quiet/tmp/wkhtmltopdffa46k_h8.html -

是否有一种简单的方法可以检查文件是否在 /tmp 中创建然后被删除? (因为它在网络请求完成后不存在)。

【问题讨论】:

  • 也许你应该展示你的wkhtmltopdf.sh 脚本。有什么原因不能修改为echo "File Created..."

标签: linux file tmp


【解决方案1】:

调试此类东西的工具称为strace。运行:

strace -f wkhtmltopdf.sh --encoding utf8--quiet/tmp/wkhtmltopdffa46k_h8.html

解释:

创建、写入、关闭、删除文件的程序需要调用内核代码来实现。这个内核函数被称为系统调用strace 将运行程序并将该命令对 stderr(!) 的任何系统调用打印出来。

如果您未经过滤地阅读它,这可能会给您提供太多信息。如果您想 grep 获取临时文件的文件名,请记住 strace 写入 stderr:

strace -f program ... 2>&1 | grep filename

PS:也可以使用包中的inotifywait inotify-tools

inotifywait -m --format "%e %f" /tmp

在这里更好地解释:https://unix.stackexchange.com/a/164801/45365

【讨论】:

  • 它都是作为 Django 请求的一部分运行的,所以使用 strace 并不容易。我可以手动运行命令,一切都很好,但在融入 Django 应用程序时失败。
  • 好的,那我推荐inotifytools。让我准备一些东西。我假设你在 Linux 上?
  • 我在 serverfault 上看到了另一个答案,建议只附加目录:chattr -a /tmp/。不是最干净的方法,但我现在可以看到临时文件没有生成。
  • inotifywait -m --format "%e %f" /tmp 可以解决问题。 (需要安装inotify-tools)查看这个帖子:unix.stackexchange.com/a/164801/45365
  • 顺便说一句,如果 django 服务器负载不重,你也可以获取它的 PID 并运行(以 root 身份)strace -fp PID
【解决方案2】:

尝试使用

watch -n0,1 "ls -lrt /tmpdir/ | tail"

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2012-08-03
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多