if 문의 결과에 따라 pid를 죽이는 방법


0

하나의 pid가 관련되어 있으면 프로그램을 다시 시작하려고합니다 (두 개의 pid가 있어야 함). 그것이 두 개 이상이면 괜찮습니다. 배쉬 스크립트를 작성하려고했지만 제대로 작동하도록 고심하고 있습니다.이 코드는 fr이므로 누구나 목표를 달성하도록 도울 수 있습니까?

#! /bib/bash
pgrepRes=($(pgrep deluge))
if ["${#pgrepRes[@]}" -ne "2"];
    then
        kill ${pgrepRes[0]};
fi
deluge

그러나 나는이 결과를 얻고있다 :

보시다시피 Deluge와 관련된 pid의 수를 확인했습니다.

미리 감사드립니다. 내가 충분히 명확 해지기를 바랍니다. 그렇지 않으면 물어보십시오 :)


시도하십시오 $(pgrep deluge | wc -l). 줄 수와 pkill delugeif 문 내부를 제공해야합니다. 공백을 추가하십시오 [ whatever is ]. 절대[withoutspaces]
— Hastur

@Hastur 답변으로 내 코드를 수정할 수 있습니까? 감사합니다
— FabioEnne

무언가가 작동하지 않으면 구성 요소로 나눕니다. 귀하의 문제는 주위에 공백의 부족 [과 ]. 호출과는 아무런 관련이 없습니다 kill.
— CVn

나는 심지어 당신의 목적에 부합하지 않는다고 생각합니다 -ne 2. 당신은 -lt 2 덜 사용 하고 평등 하지 않아야합니다 -ne... Bash Beginners Guide 에서 영감을 얻는 것이 좋습니다 .
— Hastur

답변:


0

잘못 인쇄 된 부분이 있습니다. 이런 식으로 해보십시오

#!/bin/bash
pgrepN=$( pgrep deluge | wc -l )
if [ "$pgrepN" -lt  "2" ]; then
   echo "less then 2"         # pkill deluge
   echo here restart deluge   # restart only if there were less than 2
fi

shebang (첫 번째 줄) #!에서 쉘의 경로와 경로 사이에 공백을 넣지 말아야 합니다. 테스트 연산자 []를 사용하면 대괄호 안에 공백을 넣어야합니다. 예를 들면 다음과 [ OK ] 같습니다 [NOT OK].
귀하의 목적을 올바르게 이해하면 IF 문 내부에서 발생 횟수가 2 회 미만인 경우에만 다시 시작하려고합니다.


업데이트 :

#!/bin/bash
Time_to_Sleep="5m"                      # Put here the amount of time
DKiller="/tmp/Kill_Deluge_Script.sh"    # Put here the deluge killer script Name

echo "#!/bin/bash"         >  $DKiller  # Creating script that will kill this one
echo "kill $$; sleep 3s; " >> $DKiller  # Passing the command to kill this one
echo "pkill deluge"        >> $DKiller  # Now you can kill deluge too
echo "echo deluge killed... RIP " >>   $DKiller
chmod u+x $DKiller                      # Make the script executable for you

while true 
do
  pgrepN=$( pgrep deluge | wc -l )
  if [ "$pgrepN" -lt  "2" ]; then
     echo "less then 2"         # pkill deluge
     echo here restart deluge   # restart only if there were less than 2
  fi
sleep $Time_to_Sleep
done

그것은 매력처럼 작동했습니다! 고마워요! 다음 과제는 5 분마다 실행되는 크론 작업에 연결하는 것입니다!
— FabioEnne

스크립트를 .sh 파일에 저장하고 crontab (crontab-e를 통해)을 편집하여 5 분마다 실행되도록 설정했습니다. 또한 chmod 775를 실행할 권한을 부여하지만이 방식으로는 작동하지 않는 것 같습니다. .. 스크립트를 셸에 바로 복사하여 붙여 넣으면 제대로 작동합니다. crontab이 제대로 실행된다는 것을 알고 있습니다.
— FabioEnne

매번 홍수를 피해야한다고 가정하지만 일단 실행 한 후에는 crontab 을 만지지 말고 위의 스크립트를 루프 sleep 5m안과 함께 끝없는 루프에 포함시키지 마십시오. 와 echo "kill $$ > /tmp/Kill_Deluge_Script.sh"및 echo "pkill deluge" >> /tmp/Kill_Deluge_Script.sh루프 자체 전에 당신이 대홍수 ... 죽일 수 할 때되도록
— Hastur

내가 작성한 것을 어떻게 구현할 수 있는지 알아낼 수 있습니다 ... 위의 코드를 편집 할 수 있습니까?
— FabioEnne

@FabioEnne 당신이 멈추는 곳을 시도하고 말해야합니다. BTW는 시도하기 전에 그리고 그것이 작동하는지 확인한 후에 (나는하지 않았다).
— Hastur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.