stao 发表于 2005-7-28 23:09:10

">> " 输出重定的问题,请高手指点!

我写了一个简单的脚本,想通过tracerout 两个服务器地址来判断网络故障,脚本如下:
echo " BEGIN TIME:"
date
echo "-------- traceroutedownload.gzidc.com----------"
traceroute 211.155.23.29
echo "----------traceroutewww.hk.hi.cn-----------------"
traceroute 218.77.178.12
echo " END TIME:"
date
echo "----------------------------end-----------------------"


之后我在 crontab中设置了定时执行
15,30,45,59 * * * * /home/stao/wn.sh >>/home/stao/WNWB.leases

但是通过>> 输出的结果并不是traceroute 命令的执行结果,执行结果如下:

Thu Jul 28 20:15:00 CST 2005
-------- traceroutedownload.gzidc.com----------
----------traceroutewww.hk.hi.cn-----------------
END TIME:
Thu Jul 28 20:15:00 CST 2005
----------------------------end-----------------------
BEGIN TIME:
Thu Jul 28 20:30:00 CST 2005
-------- traceroutedownload.gzidc.com----------
----------traceroutewww.hk.hi.cn-----------------
END TIME:
Thu Jul 28 20:30:00 CST 2005
----------------------------end-----------------------

而上面脚本直接,./xxx.sh 执行的话,却又是正常的,为什么?
百思不得其解? 请高手们指点一二

watch_1394 发表于 2005-7-29 12:42:45

可能是这样的:
date、echo这些是内部命令,运行脚本的时候是在当前进程里面进行,你重定向脚本的输出就是对当前进程重定向,因此date、echo的输出没有问题。但是traceroute是外部命令,脚本执行它的时候是在子进程中进行的。但是对父进程的重定向是不能影响子进程的输出,所以会出现你说的这种结果。
斑竹看看,不知道我说得对不对。

stao 发表于 2005-7-29 21:48:56

非常感谢,可是我直接在脚本内重定向比如
traceroute 211.155.23.29>>/home/stao/xx.sh
用crontab 用时运行,也是不能重定向文件内?

watch_1394 发表于 2005-7-29 23:46:31

你这样做是不是同时有两个进程在处理一个文件呢?试试source命令吧,如果不行的话,你还是另外找高人。不过解决了要给我说一下哦/。:lol:

stao 发表于 2005-7-30 05:33:01

不是两个进程处理同一个文件,当我在脚本内加上>> 后,我就把 crontab 内的>> 给取消了。谢谢。

stao 发表于 2005-8-5 10:12:13

晕了,都没有人碰到过嘛。。。

sixroom 发表于 2005-8-5 19:13:43

从你的输出看到,程序到达traceroute的时候立即返回了,并没有等待它执行结束,然后接着余下的部分.
traceroute 的执行还是有一段时间的 ,你可以用top监视一下.

stao 发表于 2005-8-6 13:24:52

你说的对,但是怎么解决呢? 为什么Traceroute 不能被正确的值行呢?

BOoRFGOnZ 发表于 2005-8-6 16:34:23

我这样 怎么没有问题?>! :shock:

stao 发表于 2005-8-6 19:34:06

如果你手功执行的话,当然没有问题,但是,如果你用Crontab 定时执行的话,就会出现这个问题,我没有测试过“> ” 写文件,我只是用了 >> 追加, 我试过两个不同发行版的Linux ,都存在这个问题。

BOoRFGOnZ 发表于 2005-8-6 20:11:28

如果你手功执行的话,当然没有问题,但是,如果你用Crontab 定时执行的话,就会出现这个问题,我没有测试过“> ” 写文件,我只是用了 >> 追加, 我试过两个不同发行版的Linux ,都存在这个问题。
那 你看这样行不: 把定向的功能代码 加到你的shell文件中!
不就 不用crontab 与>> 结合了吗

stao 发表于 2005-8-7 03:29:28

我刚开始写的 Shell 中是带有,>> 的,后来就是因为不行,才加到 crontab内,郁闷!

BOoRFGOnZ 发表于 2005-8-7 09:53:54

不可能吧 :!:

stao 发表于 2005-8-7 12:29:53

“不可能”这个想法,我当时大脑也出现过,但是事实总是事实。
 版主大哥,不信就试一下呗!

demonlj 发表于 2005-8-7 12:55:04

我觉得你说的怪怪的,你看看我的执行结果:
$ cat tmp
echo " BEGIN TIME:"
date
echo "-------- traceroute download.gzidc.com----------"
traceroute 211.155.23.29 >> /home/lj/ll
echo "----------traceroute www.hk.hi.cn-----------------"
traceroute 218.77.178.12
echo " END TIME:"
date
echo "----------------------------end-----------------------"
$ sh -x tmp
+ echo ' BEGIN TIME:'
BEGIN TIME:
+ date
日8月7 12:53:40 CST 2005
+ echo '-------- traceroute download.gzidc.com----------'
-------- traceroute download.gzidc.com----------
+ traceroute 211.155.23.29
traceroute to 211.155.23.29 (211.155.23.29), 30 hops max, 38 byte packets

$ vi ll
$ cat ll
1th137001.ip.tsinghua.edu.cn (59.66.137.1)0.418 ms0.379 ms0.357 ms
2th128001.ip.tsinghua.edu.cn (59.66.128.1)5.037 ms4.190 ms2.690 ms
3th002078.ip.tsinghua.edu.cn (59.66.2.78)0.353 ms0.344 ms0.430 ms
4th002017.ip.tsinghua.edu.cn (59.66.2.17)0.450 ms0.405 ms0.339 ms
5qhu0.cernet.net (202.112.38.69)0.565 ms0.565 ms0.650 ms
6202.112.62.78 (202.112.62.78)18.673 ms18.650 ms18.691 ms
7gzwh4.cernet.net (202.112.46.70)32.507 ms32.132 ms32.097 ms
8202.112.53.10 (202.112.53.10)32.331 ms32.086 ms32.337 ms
9202.112.61.70 (202.112.61.70)33.086 ms32.657 ms32.447 ms
10202.97.15.129 (202.97.15.129)55.533 ms *66.851 ms
11202.97.36.93 (202.97.36.93)58.504 ms42.458 ms *
12202.97.40.118 (202.97.40.118)64.292 ms44.963 ms44.795 ms
13* 61.140.17.5 (61.140.17.5)48.029 ms *
14* 61.144.0.81 (61.144.0.81)66.579 ms *
1561.144.6.113 (61.144.6.113)58.750 ms65.811 ms *
16* 219.137.2.20 (219.137.2.20)71.231 ms69.481 ms
17211.155.20.186 (211.155.20.186)72.019 ms62.930 ms64.932 ms
18211.155.23.29 (211.155.23.29)69.302 ms68.777 ms73.417 ms
1th137001.ip.tsinghua.edu.cn (59.66.137.1)0.450 ms0.467 ms0.370 ms
2th128001.ip.tsinghua.edu.cn (59.66.128.1)1.846 ms2.089 ms4.639 ms
3th002078.ip.tsinghua.edu.cn (59.66.2.78)0.404 ms1.772 ms0.394 ms
4th002017.ip.tsinghua.edu.cn (59.66.2.17)0.476 ms0.386 ms0.382 ms
5qhu0.cernet.net (202.112.38.69)0.529 ms0.541 ms0.605 ms
6202.112.62.78 (202.112.62.78)18.704 ms18.663 ms18.656 ms
7gzwh4.cernet.net (202.112.46.70)32.485 ms32.341 ms32.326 ms
8202.112.53.10 (202.112.53.10)33.599 ms32.356 ms32.270 ms
9202.112.61.70 (202.112.61.70)32.272 ms32.303 ms32.264 ms
10202.97.15.129 (202.97.15.129)57.534 ms61.738 ms59.247 ms
11* 202.97.36.93 (202.97.36.93)51.350 ms74.437 ms

上面的显示结果你观察下,按照我理解你的帖子的意思。我觉得我的执行结果没有什么错吧 :wink:
页: [1] 2
查看完整版本: ">> " 输出重定的问题,请高手指点!