导航

linux shell 重定向替换命令疑惑

Posted on 2013-08-22 22:06  起色  阅读(91)  评论(0)    收藏  举报

在工作中用crontab通过bash处理数据的时候,发现了这个问题,事情是这样的。

我用crontab没两分钟,把数据导出来,放在一个临时文件当中,代码模拟如下

echo "select * from A" | mysql -uroot database -N > tmp

 cat tmp | while read a b c; do
 #处理一些业务逻辑
done echo "truncate A" | mysql -uroot database 

大致的流程如上,但是中间处理业务逻辑的部分太长了,导致下一个crontab处理时还没有处理玩当前的crontab,crontab相互之间是不会影响的,但是生成的文件确实替换的。

这就导致了在下一个cat执行时,tmp文件已经被重新写入了,于是,再cat 时已经报错了,我大胆提出假设,替换命令是线程不安全的

 

后来我写了一个测试方法

1  i=0;
2  while [ $i < 3 ] ; do
3     echo ·"$1_$i"
4     i=$(($i+1))
5     sleep 1
6  done > T

这是一个写入的方法,通过单独调用分别传A B C 值进去

另外写一个一直读取T的方法,我本以为,T文件当中要么全显示A_0 A_1 A_2,要么全是B,或者C,但是,没有想到的是 竟然出现了 A_2 B_1 C_0 类似这样的内容,实在让人很不解,果然,是线程不安全的,但是为什么什么时候写都只有3行也让人疑惑

 

可能没有表达清楚,第一次写文章没有怎么整理,如果有网友明白其中原因,希望能够不吝赐教,十分感谢