프로세스가 2시간 이상 실행되면 이메일을 보내는 쉘 스크립트를 Redhat Linux에서 작성하려고 합니다. 이것은 내 스크립트입니다.
#!/bin/sh
RESULT=find /proc -maxdepth 1 -user gen17 -type d -mmin +120 | wc -l;
if [ "$RESULT -ge 1" ];
then
find /proc -maxdepth 1 -user gen17 -type d -mmin +120 -exec basename {} \; | mail -s 'process running more than 2 hours' <myemail>
fi
echo "now sleeping for 2 mins"
sleep 120
done
나에 따르면 결과가 1보다 크거나 같은 경우에만 이메일을 보내야 하지만 값이 0이면 이메일을 보내게 됩니다.
답변1
코드에 문제가 있는 것 같습니다. 먼저, 명령의 출력을 문자열로 저장하려면 $()
다음과 같은 구문을 사용하여 명령을 묶을 수 있습니다.
RESULT=$(find /proc -maxdepth 1 -user gen17 -type d -mmin +120 | wc -l)
if
다음으로, 귀하의 진술이 잘못된 것 같습니다 . 모든 내용을 따옴표로 묶으면 문자열로 처리됩니다(이 경우에는 항상 실제 명령문으로 처리됩니다). 나는 다음이 효과가 있을 것 같아요:
if [ $RESULT -ge 1 ]
아니면 다음과 같은 것을 시도하고 있을 수도 있습니다.
if [ "$RESULT" -ge "1" ]
직접 테스트하지 않고도 이 경우 두 가지 모두 작동할 것이라고 생각합니다.
답변2
귀하의 구성은 $RESULT
값과 리터럴 텍스트를 포함하는 단일 문자열 입니다 -ge 1
. 그런 다음 암시적으로 길이가 0인지 확인합니다. 문자열 길이는 0이 아니기 때문에 테스트는 1을 반환합니다.
[ "$RESULT -ge 1" ]
내 생각에 당신에게 필요한 것은 이것이다.
[ "$RESULT" -gt 1 ]