现象描述:
执行脚本down.sh,内容:
mkdir -p bak2log
killall -9 dt
sleep 1
echo '-----------------------------------------------------'
tftp -g -r dt 192.168.42.219
mv ./log.d/* ./bak2log/
...(其他内容)
其中的dt会常打开日志文件log.d/dt.log
脚本的功能为杀掉dt,备份日志(mv到其他目录),下载新的dt程序,重启启动dt(略)
执行后发现log.d下只生成了一个0字节的新文件,但是没有文件内容,查看打开句柄情况:
# ls -l /proc/8977/fd/
lr-x------ 1 0 0 64 Mar 25 15:02 0 -> /dev/null
lrwx------ 1 0 0 64 Mar 25 15:02 1 -> /dev/null
lrwx------ 1 0 0 64 Mar 25 15:02 10 -> /dev/audit_kdi2010v1
l-wx------ 1 0 0 64 Mar 25 15:02 11 -> /dev/null
lrwx------ 1 0 0 64 Mar 25 15:02 2 -> /dev/null
lrwx------ 1 0 0 64 Mar 25 15:02 3 -> /memory_module
lrwx------ 1 0 0 64 Mar 25 15:02 4 -> /sysinfo_module
lrwx------ 1 0 0 64 Mar 25 15:02 5 -> socket:[533]
lrwx------ 1 0 0 64 Mar 25 15:02 6 -> socket:[538]
l-wx------ 1 0 0 64 Mar 25 15:02 7 -> /v_dt/bak2log/dt.log
l-wx------ 1 0 0 64 Mar 25 15:02 8 -> /v_dt/.dt.lock
发现绑定的竟然是备份目录下的日志文件
尝试延长sleep的值,无效
尝试改mv为cp+rm,问题解决。
但是百思不得其解,为什么mv后的文件会依然被之后启动的进程所使用。