为什么我的 shell 脚本死了?

为什么我的 shell 脚本死了?

观察1

logic.sh

#!/bin/bash
#get system metrics
#do stuff and echo it
echo "put metrics" | nc $ip $port
echo "Metrics $metrics"

run_logic.sh

#!/bin/bash
while true;do
  sh logic.sh >> test.log 2>&1 &
  sleep 60
done

start_logic.sh

#!/bin/bash
case $1 in
  start)
       #start the run_logic.sh
       ;;
   stop)
      #stop the run_logic.sh
      ;;
    *)
     echo "Invalid Option!"
     exit 1
esac
exit0

观察2

logic.sh

#!bin/bash
while true;do
  #do stuff and echo it
  #get System Metrics and put it
  echo $stuff
  sleep 60
done

start_logic.sh

#!/bin/bash
case $1 in
  start)
       #do some stuff, check already started or not
       sh logic.sh >> test.log 2>&1 &
       ;;
   stop)
      #do some stuff
      #Kill the process
      ;;
    *)
     echo "Invalid Option!"
     exit 1
esac
exit0

现在!,在观察1中,脚本在执行过程中死亡。我检查了日志,但没有看到任何错误消息。在观察 2 中,脚本运行良好(99% 良好!)。那么,观察1和观察2有什么区别,为什么脚本在第一种情况下会死掉?

答案1

在观察 1 中,您启动一​​个 shell,logic.sh在后台每 60 秒执行一次 ( &)。使用的命令netcat应该发送数据到一个ip/端口,但是如果远程端没有人监听(默认为tcp),它将错误退出。

相关内容