Консультация № 96089
23.07.2007, 14:46
0.00 руб.
0 3 3
Freebsd 6.2
вопрос у меня к вам такой: как проверить и по необходимости запустить процесс, если не сложно пример скрипта. заранее благодарен.

Приложение:
проблема с samsdaemon переодически отваливается.

Обсуждение

давно
Академик
20764
1861
23.07.2007, 15:09
общий
это ответ
Здравствуйте, Kovalev Sergey Aleksandrovich!

В приложении - самый простой но не самый аккуратный метод

Но в дистрибутивах бывают для этого специальные церберы. Так в Fedora есть dwatch

Приложение:
killall -0 samsdaemon || samsdaemon &
Неизвестный
23.07.2007, 22:50
общий
это ответ
Здравствуйте, Kovalev Sergey Aleksandrovich!

Пример небольшого довольно топорного скрипта в приложении. Комментарии:
- grep -v grep исключает из вывода строку "grep mycooldaemon" - ведь она тоже попадает под шаблон :-)
- конструкция ${#myproc} возвращает длину переменной в символах. Это более надежно, чем -z $myproc

Еще есть варианты искать и читать PID файл, если он пишется или написать скрипт на rcNG, в котором есть встроенные средства проверки

Приложение:
#!/bin/shmyname="mycooldaemon"myproc=`ps -ax | grep $myname | grep -v grep"if [ ${#myproc} -eq 0 ]; then echo "Mycooldaemon do not run"else echo "Mycooldaemon run"fi
Неизвестный
24.07.2007, 20:51
общий
это ответ
Здравствуйте, Kovalev Sergey Aleksandrovich!

Запуская прогармку microdc2 через screen в cron от пользователя microdc2
Програмка запускается без шела, поэтому ps выводит полный путь до нее, как и была запущена. Поэтому делаю grep на полный путь.

В кроне так: * * * * * /home/microdc2/microdc2.sh >/dev/null 2>&1

Пример в приложении

Приложение:
#!/usr/local/bin/bash# проверяет есть ли процесс в памяти и если нет, запускает егоif !(ps auxww | grep /usr/local/bin/microdc2 | grep -v grep >/dev/null 2>&1) then# /usr/local/bin/screen -A -d -m -S microdc2 /usr/local/bin/microdc2fi
Форма ответа