내 쉘 스크립트가 왜 작동하지 않습니까?

내 쉘 스크립트가 왜 작동하지 않습니까?

관찰 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

logic.sh관찰 1에서는 백그라운드에서 60초마다 실행되는 셸을 시작합니다 ( &). 사용된 명령은 netcat데이터를 IP/포트로 보내는 것으로 가정하지만 원격 측(기본적으로 tcp)에서 수신 대기하는 사람이 없으면 오류와 함께 종료됩니다.

관련 정보