/tmp 中的临时文件被神秘删除

/tmp 中的临时文件被神秘删除

我编写的脚本将某个子目录中的某些文件/tmp用作临时文件。几个小时内,这些文件的打开和关闭都十分顺利。然后,不知从何而来,这些文件再也找不到了。

我查看了一下/var/log/messages,没有发现文件消失时引发任何警报。

有人知道我该如何解决这个问题吗?

是的,我知道/tmp这不是我关心的文件的理想位置,但我仍然想知道是什么导致了这种行为。

答案1

原版 F14/tmp每天仅删除一次文件,并且仅删除已保存 10 天以上的文件/etc/cron.daily/tmpwatch

您可以使用审计子系统。假设文件位于目录中/tmp/help/etc/audit/audit.rules添加

-a exit,always -F path=/tmp/help

然后使用 重新启动 auditd 。执行 时/etc/rc.d/init.d/auditd restart记录的内容如下:/var/log/audit/audit.logrm /tmp/help/heregoes

type=SYSCALL msg=audit(1299113860.183:47): arch=c000003e syscall=263 success=yes exit=0 a0=ffffffffffffff9c a1=133a0c0 a2=0 a3=1 items=2 ppid=21286 pid=21328 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts361 ses=1 comm="rm" exe="/bin/rm" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=CWD msg=audit(1299113860.183:47):  cwd="/root"
type=PATH msg=audit(1299113860.183:47): item=0 name="/tmp/help/" inode=398818 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0
type=PATH msg=audit(1299113860.183:47): item=1 name="/tmp/help/heregoes" inode=398819 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:user_tmp_t:s0

第一行(相当长)显示可执行文件、pid 和 ppid,这可能会有所帮助。

答案2

/tmp用于临时文件存储。通常在启动时和/或已满时和/或按时清除。

我不知道在 Fedora 上情况如何,但一些其他 Unix 系统使用/etc/init.d/bootclean.sh或 cronjobs。`

答案3

如果您的脚本有多个实例同时运行,会出现问题吗?

如果有,请尝试在文件名中使用 $$(转换为运行脚本的进程的 PID)。例如

some_command > /tmp/output.$$

应该可以解决问题。

答案4

根据您的发行版,tmp 文件可能会被擦除,因为它们在一段时间内未被触及。

查找名为“tmpwatch”的 cronjob,可能位于 /etc/cron.daily 中

它肯定应该超过“几个小时”,默认是30到60天之间。

相关内容