我有一个输出各种状态消息的基本脚本。例如重定向Bash子脚本的输出
~$ ./myscript.sh
0 of 100
1 of 100
2 of 100
...
我想将它包装在父脚本中,以便运行一系列子脚本并在整体完成时发送电子邮件,例如, topscript.sh
#!/bin/bash
START=$(date +%s)
/usr/local/bin/myscript.sh
/usr/local/bin/otherscript.sh
/usr/local/bin/anotherscript.sh
RET=$?
END=$(date +%s)
echo -e "Subject:Task Complete\nBegan on $START and finished at $END and exited with status $RET.\n" | sendmail -v [email protected]
我运行此类似:
~$ topscript.sh >/var/log/topscript.log 2>&1
然而,当我运行tail -f /var/log/topscript.log
检查日志我什么也看不见,即使运行顶部显示myscript.sh当前正在执行,并因此推测输出状态消息。
为什么不在父级日志中捕获子脚本的stdout/stderr?我该如何解决?
编辑:我也在远程计算机上运行这些,通过ssh使用伪tty分配连接,例如, ssh -t [email protected]
。伪tty可能会干扰?
如果下面的避难所的答案没有帮助,你可能想尝试缩小发生错误的地方。有些事情要尝试:(1)./myscript.sh> tmp.log 2>&1'是否写入'tmp.log'?如果不是,可能是检查'[[-t 1]]',并且只在标准输出是TTY时才写消息。 (2)'topscript.sh'完成后,你看到日志中的消息吗? (换句话说,这只是他们被推迟了吗?这是庇护所,只有一个人的答案都暗示。) – ruakh 2011-12-21 18:33:21