Linux bash脚本有时会退出while true循环

Linux bash脚本有时会退出while true循环,linux,bash,while-loop,Linux,Bash,While Loop,我有一个简单的脚本,它记录了比特币的汇率。我发现每隔几天脚本就会停止。为了让它继续运行,我在无限循环之后添加了对脚本本身的调用,但我想知道它为什么退出。谢谢你的提示 #!/bin/bash # logfile logfile=/var/log/bitcoin_log # frequency of updates, in minutes sleepmins=1 # url of the bitcoin exchange rates url=https://blockchain.info/it/t

我有一个简单的脚本,它记录了比特币的汇率。我发现每隔几天脚本就会停止。为了让它继续运行,我在无限循环之后添加了对脚本本身的调用,但我想知道它为什么退出。谢谢你的提示

#!/bin/bash

# logfile
logfile=/var/log/bitcoin_log
# frequency of updates, in minutes
sleepmins=1
# url of the bitcoin exchange rates
url=https://blockchain.info/it/ticker
# timeout
timeout=120
# number of bitcoins
balance=1

let sleepsecs=$sleepmins*60

#infinite loop
while true
do
    eur=`curl -m $timeout -s $url | grep EUR |  awk '{print $11}'`
    eur=${eur::-1}
    eurwall=`echo $eur*$balance | bc`

    echo `date --rfc-3339=seconds`' '$eur' '$eurwall >> $logfile
    sleep $sleepsecs
done

# if the script breaks out of the infinite loop, write to the log and restart it
echo `date --rfc-3339=seconds`' '$0' pid '$$': exited the infinite loop' >> \
    $logfile

./btcwallet &

这里有很多虫子,它们会抓住的。除此之外——这是让服务在出现故障时自动重启的错误方法;它不会从杀死整个shell的任何信号或其他条件中恢复,而只是终止循环。使用你的操作系统附带的进程监控机制——在启动的MacOS上,在当前的Fedora上,它是systemd,在许多Debian和Ubuntu系统上,它是upstart,等等。在这一点上:你是否验证了你的“修复”问题的代码真的这样做了——“退出无限循环”实际上被记录了,等等?我还要确保您检查流程的标准输出和标准输出。确保你也将这些记录到一个文件中。我猜curl可能有点error@Gary,当然,但是curl得到错误实际上不会退出循环。除非解释器以
bash-e yourprog
或类似方式启动。即使这样,它也不会退出,除非
awk
具有非零退出状态,除非设置了
pipefail
。顺便说一句,如果要使用
awk
,为什么需要
grep
bc
awk
既可以进行过滤,也可以进行内置的数学运算。