我编写的脚本将某个子目录中的某些文件/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.log
rm /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天之间。