Я пытаюсь перезапустить программу, если с ней связан только один pid (у него должно быть два pid). если у него более одного, это нормально, я пытался написать bash-скрипт для этого, но я изо всех сил стараюсь заставить его работать правильно, это мой код, так что, кто-нибудь может мне помочь в достижении моей цели?

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

но я получаю этот результат:

Как видите, я проверил, сколько pid связано с Deluge.

Заранее спасибо, надеюсь, я прояснил себя достаточно, иначе спрашиваю :)

1 ответ1

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

Обратите внимание, что в шебанге (первая строка) вы не должны ставить пробел между #! и путь оболочки, с оператором теста [] вам нужно заключить пробелы в скобки: например, это [ OK ] это в [NOT OK] .
Если я правильно понимаю вашу цель, вы хотите перезагрузить компьютер только в том случае, если имеется менее 2 вхождений, так что внутри инструкции IF.


Обновление:

#!/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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .