관찰 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)에서 수신 대기하는 사람이 없으면 오류와 함께 종료됩니다.