Shell Script для мониторинга процессов - PullRequest
2 голосов
/ 26 августа 2011

Это

#!/bin/bash
if [ `ps -ef | grep "91.34.124.35" | grep -v grep | wc -l` -eq 0 ]; then sh home/asfd.sh; fi

или это?

ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
if [  "$?" -ne "0" ]
then
sh home/asfd.sh
else
echo "Process is running fine"
fi

Здравствуйте, как я могу написать сценарий оболочки, который выглядит в запущенных процессах и если нет имени процесса CONTAINING 91.34.124.35 затем выполните файл в определенном месте, и я хочу, чтобы это выполнялось каждые 30 секунд в непрерывном цикле, я думаю, что была команда сна.

Ответы [ 9 ]

3 голосов
/ 26 августа 2011

вы не можете использовать cron, так как в реализации я знаю, что наименьшая единица составляет одну минуту.Вы можете использовать sleep, но тогда ваш процесс всегда будет работать (с помощью cron он будет запускаться каждый раз).

Для использования sleep просто

while true ; do
  if ! pgrep -f '91\.34\.124\.35' > /dev/null ; then
    sh /home/asfd.sh
  fi
  sleep 30
done

Если у вашего pgrep есть опция -q для подавления вывода (как в BSD) вы также можете использовать pgrep -q без перенаправления вывода на /dev/null

1 голос
/ 26 октября 2013

Я бы предложил использовать watch:

watch -n 30 launch_my_script_if_process_is_dead.sh
1 голос
/ 26 августа 2011

Прежде всего, вы должны иметь возможность уменьшить ваш скрипт до

if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi

Чтобы запускать это каждые 30 секунд через cron (потому что cron запускается только каждую минуту), вам нужно 2 записи - одна для запуска команды, другая для задержки на 30 секунд перед повторным выполнением этой же команды. Например:

* * * * * root if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi
* * * * * root sleep 30; if ! pgrep "91\.34\.124\.35" > /dev/null; then ./your_script.sh; fi

Чтобы сделать это чище, вы можете сначала сохранить команду в переменной и использовать ее для обеих записей. (Я не проверял это).

CHECK_COMMAND="if ! pgrep '91\.34\.124\.35' > /dev/null; then ./your_script.sh; fi"

* * * * * root eval "$CHECK_COMMAND"
* * * * * root sleep 30; eval "$CHECK_COMMAND"

p.s. Выше предполагается, что вы добавляете это к /etc/crontab. Чтобы использовать его в пользовательском crontab (crontab -e), просто пропустите имя пользователя (root) перед командой.

0 голосов
/ 11 мая 2018

Вы можете использовать monit для этой задачи. См. Документ .Он доступен в большинстве дистрибутивов Linux и имеет простую конфигурацию.Найдите примеров в этом посте

Для вашего приложения это будет выглядеть примерно так:

check process myprocessname
    matching "91\.34\.124\.35"
    start program = "/home/asfd.sh"
    stop program = "/home/dfsa.sh"

Если monit недоступен на вашей платформе, выможно использовать supervisord .

Я также нашел этот вопрос очень похожим Повторите команду автоматически в Linux .Он предлагает использовать watch.

0 голосов
/ 17 февраля 2014

Я считаю деамонизирующие критические сценарии очень эффективными.

http://cr.yp.to/daemontools.html
0 голосов
/ 26 октября 2013

Вы можете сохранить свой скрипт в имя файла, myscript.sh

тогда вы можете запустить свой скрипт через cron,

 */30 * * * * /full/path/for/myscript.sh

или вы можете использовать, пока

 # cat script1.sh
 #!/bin/bash
 while true; do /bin/sh /full/path/for/myscript.sh ; sleep 30; done &

 # ./script1.sh

Спасибо.

0 голосов
/ 26 августа 2011

Попробуйте:

if ps -ef | grep "91\.34\.124\.35" | grep -v grep > /dev/null
then
    sh home/asfd.sh
else
    echo "Process is running fine"
fi

Не нужно использовать test.if сам проверит код выхода.

0 голосов
/ 26 августа 2011

В любом случае все в порядке, вы можете сохранить его в файле .sh и добавить его в crontab для запуска каждые 30 секунд. Дайте мне знать, если вы хотите знать, как использовать crontab.

0 голосов
/ 26 августа 2011

Используйте cron для части «цикл каждые 30 секунд».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...