如何备份运行shell脚本的stdout

时间:2014-03-24 13:20:51

标签: linux bash shell solaris

以下是问题的简短示例

将每10秒测试写入其标准输出的短脚本

> cat write.sh #!/bin/sh while [ 1 ];do echo test sleep 10 done

以下是我们执行它的方式,我们将stdout重定向到名为output.txt的文件

  

./ write.sh> output.txt的

现在,脚本应该永远运行"但是同时它会填充output.txt

我们正在寻找一种方法来备份此output.txt而无需重新启动脚本。 此外,我们正在寻找隐式解决方案,因此即使脚本也不知道该文件已备份。

当然,一旦我们删除此文件(例如压缩它),进程(脚本)将丢失此文件的跟踪并停止写入。 即使我们备份文件(压缩)然后使用touch返回文件,脚本也无法重新连接到此文件。

例如:

  

mv test_file.txt test_file111.txt

     

rm test_file111.txt

> lsof | grep write write.sh 2644 ronnyr 1w REG 253,1 36 106059124 /home/ronnyr/test_file111.txt (deleted)

> touch test_file111.txt write.sh 2644 ronnyr 1w REG 253,1 36 106059124 /home/ronnyr/test_file111.txt (deleted)

1 个答案:

答案 0 :(得分:2)

如果要更改或截断输出文件,请使用>>,如下所示:

./write.sh >> output.txt
# take backup
cp -p output.txt /path/backup/
# truncate stdout file
> output.txt

由于使用>>(追加)./write.sh将继续在文件末尾写入输出,并且在截断输出文件时不会受到影响。