网络经常出现故障,我想监控输出。我尝试临时使用以下命令:
ping www.google.fr | while read pong; do echo "$(date): $pong"; done 1>/dev/null && 2> ~/ping_err.log
但 STDERR 仍然重定向到 STDOUT 而不是 ping_err.log
注意:我只希望文件中有 STDERR(而不是 2>&1)
谢谢!
答案1
我不会回答你的重定向问题,而是stderr
建议一个更好的(IMHO)方法:
输入https://github.com/waltinator/net-o-matic.git
——监视(WiFi)网络故障,然后执行用户指定的事情来修复它。
有一种方法可以监控你的连接:
ip monitor address | \
egrep --line-buffered \
'^Deleted [[:digit:]]+: [[:alnum:]]+[[:space:]]+inet[[:space:]].* scope global ' | \
while read line ; do
...
我的net-o-matic
脚本还包含一次询问的方法:
function netstate () {
# Return network state as "UP" or "DOWN"
#Adjust how you decide net is UP/DOWN
ip link show | egrep -q 'UP,LOWER_UP.* state UP'
if [[ $? -eq 0 ]] ; then
echo "UP"
else
echo "DOWN"
fi
}
答案2
使用您的代码,这似乎有效:
$ ping www.google.fr 2>&1 > /dev/null | while read pong; do echo "$(date): $pong" ; done 2>&1 > ping_err.log
[no output]
$ cat ping_err.log
vie jul 5 15:56:09 -03 2019: ping: sendmsg: La red es inaccesible
vie jul 5 15:56:10 -03 2019: ping: sendmsg: La red es inaccesible
vie jul 5 15:56:11 -...
答案3
我稍微扩展了@schrodigerscatcuriosity 的答案:
ping -i 10 -O -q 192.168.88.2 2>&1 | while read pong; do echo "$(date): $pong" ; done 2>&1 | tee ping_err.log
-i 10
发送每个数据包前等待 10 秒-O
用于在发送下一个数据包之前记录未完成的 ICMP ECHO 回复-q
用于安静输出(超时除外)| tee
同时将输出打印到控制台和文件