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.