nohup을 사용하여 실행하는 쉘 스크립트를 만들었습니다. 스크립트는 다양한 SQL 스크립트를 순차적으로 실행하지만 병렬로 실행하는 경우는 거의 없습니다. 내 스크립트에는 다음과 같은 진술이 있습니다.
echo exit | sqlplus -s ${username}/${pwd}@${DB} @close1.sql
echo exit | sqlplus -s ${username}/${pwd}@${DB} @close2.sql
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing1.sql &
pid1=$!
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing2.sql &
pid2=$!
echo "Pricing Insert PIDs => ${pid1}, ${pid2}"
while [ `ps -p ${pid1},${pid2} | wc -l` > 1 ]
do
sleep 5
done
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing3.sql
목적은 close1 -> close2 -> insertPricing1 및 insertingPricing2 -> insertPricing3을 병렬로 실행하는 것입니다. 여기서 ->는 순서대로를 의미합니다.
다음 날 결과를 확인했을 때(충분한 시간이 지난 후에 완료되어야 함) 쉘 스크립트가 여전히 실행 중임을 확인했습니다. Pricing1과 Pricing2는 완료되었지만 Pricing3은 아직 시작되지 않았습니다. 1, 2 과정이 완료되었습니다.
ps -p 19105,19107
PID TTY TIME CMD
while 루프를 실행하면 문제가 발생합니다.
# ps -p 19105,19107 | wc -l
1
하지만 이것은-
# while [ `ps -p 19105,19107 | wc -l` > 1 ]
> do
> echo "hello"
> done
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
........ ctrl+C
그렇다면 1이 1보다 크지 않을 때 이 루프가 작동하는 이유는 무엇입니까? 해결책은 무엇이어야 합니까?
답변1
나를 도와준 @steeldriver의 의견에 감사드립니다. 내 관점에서 이것은 어리석은 실수이다. > [ ](또는 쉘 스크립트의 대부분의 위치) 내에서는 리디렉션 연산자로 처리됩니다. 표준 사용법은-gt
링크의 답변에 따라 정수를 비교하려면 -
-eq #Is equal
-ne #Is not equal
-lt #Less than
-le #Less than or equal
-gt #Greater than
-ge #Greater than or equal