Измените имя скрипта в памяти ИЛИ другое решение - PullRequest
0 голосов
/ 03 февраля 2020

Итак, у меня есть скрипт, который запускает поиск для себя с помощью awk и ps и убивает каждый экземпляр, если он что-то находит, или выполняет что-то, если он этого не делает. Проблема в том, что он всегда находит свой экземпляр, так как действие запуска сценариев создает процесс, поэтому он никогда не выполняет что-то еще и вступает в oop самоубийство.

Вопрос в том, : Как я могу изменить имя запущенного процесса? или есть какой-то другой обходной путь, который исправляет этот вечный l oop?

Сценарий

#!/bin/bash


asd=$(ps aux | grep -v "color=auto" | grep "S\|R\|S+" | grep "bash asd.sh" | awk '{print $2}')
echo $asd
if [  -z "$asd" ]
  then
    while true
      do
        a=$(docker ps -a | awk '/137/ {print $1}')
        ## si container "a" esta parado por error 137, reiniciar
        if [ ! -z "$a" ]
          then
            docker restart $a
            echo "se reinicio el container $a, fallo por falta de memoria (error 137)"
        fi
        sleep 500
    done &
else
  echo " #### Matando Script #### "
  sudo  kill $asd
fi

1 Ответ

1 голос
/ 03 февраля 2020

Не проверяйте, запущен ли процесс, проверьте, сколько ваших процессов запущено. Если их больше одного, это означает, что он работает, так как один принадлежит $ 0 (фактический скрипт).
Вот мое решение, я добавил w c -l (подсчет выходных строк) в вашу команду ps

#!/bin/bash


asd=$(ps aux | grep -v "color=auto" | grep "S\|R\|S+" | grep "bash asd.sh" | awk '{print $2}' | wc -l)
echo $asd
if [ "$asd" -gt "1" ]
  then
    while true
      do
        a=$(docker ps -a | awk '/137/ {print $1}')
        ## si container "a" esta parado por error 137, reiniciar
        if [ ! -z "$a" ]
          then
            docker restart $a
            echo "se reinicio el container $a, fallo por falta de memoria (error 137)"
        fi
        sleep 500
    done &
else
  echo " #### Matando Script #### "
  sudo  kill $asd
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...