Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка запущен скрипт или нет.  (Прочитано 19025 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« : 25-07-2007 10:28 » 

Проблема такая: на сервере каждые 10 минут запускается скрипт perl.pl во время 0, запустился первый раз, в 10 мин. запускается второй раз, и в этот раз нужно проверить жив ли ещё процесс с первого запуска или нет, если жив, то второй процесс прекращается, если нет, то продолжается
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 25-07-2007 10:43 » 

а ps поможет?

ps |grep process

man grep
чтоб исключить строку поиска из результата
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 25-07-2007 10:52 » 

Спасибо. Сейчас попробую.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 25-07-2007 11:05 » 

ps ax |grep process|grep -v grep

но сначала man Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 25-07-2007 16:28 » 

Это всё надо реализовать на Perl'е, так что ps не подходит. Скрипт зарускаю не я а crontab на сервере
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 25-07-2007 16:43 » 

а какая разница кто запускает?
запускай шеловский скрипт, содержащий

ps ax |grep process|grep -v grep
process.pl

соответственно, проверив, результат первой команды
или же
в перловском скрипте, выполнив системный вызов, проверить результат, и принять решение о дальнейшей работе.
просто тогда результат даст, например 2 строки, что означает не выполнять скрипт,1 строка - выполнять

 
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 25-07-2007 16:46 » 

Paul, это классическая задачка синхронизации процессов. В таких случаях обычно обходятся lock-файлами. Выглядит это примерно так:
1. Процесс проверяет наличие lock-файла.
1.1. Если его нет, то создает его и записивает в него свой PID.
1.2. Если есть, считывает оттуда PID и проверяет наличие такого процесса в системе.
1.2.1. Если он есть, то процесс должен завершиться.
1.2.2. Если нет, то очищает файл и пишет в него свой PID.

Для сравнительно редко запускаемых задач это самый легкий способ. Чтобы не случилась ситуация гонки, стоит блокировать файл на время чтения-записи.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 26-07-2007 05:02 » new

Всё, спасибо. Разобрался.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-07-2007 06:04 » 

Paul, расскажи, покажи...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 31-07-2007 05:50 » 

т.к. shell'е я не шарю пришлось использовать php, вот что у меня получилось, пока отлично работает.
Код:
<?
$out=shell_exec("ps ax|grep server2.pl|grep -v grep");
if(!strpos($out,"server2.pl"))
{
shell_exec("perl server2.pl");
echo "server is running";
}
else
printf("server already running\n");
?>
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 31-07-2007 06:27 » 

Paul, ну ты даешь Улыбаюсь
связка php+shell+perl

Тебе дали подсказку - используй семафоры

в перловском скрипте
при запуске проверяй наличие PID
если PID перловского скрипта существует, то закончить скрипт ничего не делая.
если не существует - создать PID и выполнить тело перловского скрипта.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines