Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка запуска экзепляра скрипта 
:(
    Опции темы
DIAgen.G
Дата 3.3.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Вот в чем пробема, есть скрипт, который запускается через каждые 30-90 минут через CRON, а возможно ли как-нибудь при помощи PHP при запуске скрипта проверить если он уже запущен, то просто делаем DIE(), если нет то тогда запускаем скрипт?
PM MAIL   Вверх
Всемогущий
Дата 3.3.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: нет
Всего: 13



 smile 

Это сообщение отредактировал(а) Всемогущий - 3.3.2007, 13:03


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
skyboy
Дата 3.3.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



для Windows-платформ такое недоступно, но есть в PHP функции по работе с семафорами.
PM MAIL   Вверх
DIAgen.G
Дата 3.3.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 18.2.2007

Репутация: нет
Всего: нет



Цитата(Всемогущий @ 3.3.2007,  10:39)
единственное что смог придумать:
либо создавать текстовый файлик 
либо нагадить в БД smile

Добавлено @ 12:40 
как Вас устроит?

Только вот только одно, если скрипт завершился критически он не успее не занести в базу или записать в файл даные! Может и ошибаюсь(((

Добавлено @ 13:15 
Еще, пропустил, этот скрипт должен все время весеть в памети, получается вроде сервиса должен быть!

Это сообщение отредактировал(а) DIAgen.G - 3.3.2007, 13:06
PM MAIL   Вверх
skyboy
Дата 3.3.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



DIAgen.G, целевая платформа - *nix или Windows? если windows - то в модуле win32 есть функции, позволяющие создать сервис на основе php - скрипта. для *nix как создать демона - не знаю, скорее всего, такого нет в 5 версии.
Цитата(DIAgen.G @  3.3.2007,  12:05 Найти цитируемый пост)
Только вот только одно, если скрипт завершился критически он не успее не занести в базу или записать в файл даные!

для этого можно заюзать поле "последнее обращение", вроде timeout'a. ты же сам говоришь, что скрипт запускается через фиксированные промежутки времени. кроме того, можно сделать не просто проверку "тут какой-то флаг в БД установлен, значит, место занято", а записать в некую заранее определенную область(файл, опять же, или БД) некий запрос "ты ещё жив?" и если в timeout-промежуток придет ответ "да, не мешай"(опять же - в некую определенную заранее область - файл, БД, семафор), то второй экземпляр отключится. если же ответ не придет, то считаем первый процесс пропавшим без вести и начинаем свое черное дело smile зачем тогда флаг "дело идет" если все равно запросы подавать? а чтоб если точно никто не работает, не приходилось выжидать timeout. 
PM MAIL   Вверх
boombick
Дата 4.3.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 20.4.2005
Где: Moscow, Russia

Репутация: нет
Всего: 9



Цитата(skyboy @  3.3.2007,  14:59 Найти цитируемый пост)
ля *nix как создать демона - не знаю, скорее всего, такого нет в 5 версии.

да и лучше использовать для создания демона более приспособленные для этого языки и не забивать гвозди микроскопом


--------------------
Все вышесказанное - имхо, и на истину в последней инстанции не претендует
------
UNIX and other
PM MAIL WWW ICQ   Вверх
CyClon
Дата 14.4.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Код
<?php

if (!file_exists('loaded.status')) {
    // ... создание файла loaded.status ...
    include('script.php'); // Наш скрипт
    //... удаление файла loaded.status ... 
}

?>


Вот такая вот идейка...


--------------------
user posted image
PM   Вверх
Jema
Дата 11.7.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 11.12.2003

Репутация: нет
Всего: нет



Все круто.... только если не произойдет по каким либо причинам 
//... удаление файла loaded.status ...
то что будем делать?
PM MAIL   Вверх
lorien
Дата 11.7.2007, 16:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.11.2004
Где: omsk

Репутация: нет
Всего: 3



Очень просто, открываешь файл и лочишь его.
При следующем запуске проверяешь, если файл залочен, значит скрипт живой.
PM WWW   Вверх
Fally
Дата 11.7.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



А может попробывать его popen()'ом? Если вернулся ресурс, тогда die(), если нет - пусть скрипт себе работает...


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Golda
Дата 12.7.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 3
Всего: 42



Если я правильно поняла, требуется, чтобы скрипт работал всегда в единственном экземпляре, а по завершении работы вызывался новый instance. Для Unix/Linux можно прописать его вызов в /etc/inittab с флагом respawn


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
lorien
Дата 14.7.2007, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.11.2004
Где: omsk

Репутация: нет
Всего: 3



Скорее всего человек хочет пускать скрипты на шаред хостинге, вряд ли там пров даст ему /etc/inittab править )
PM WWW   Вверх
Diesel Draft
Дата 15.7.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: нет
Всего: 5



Извините, выше не читал. У меня идея.

При запуске скрипт можно убить свою запись крон, а на конце опять запустить. Вы точно будете знать что он не повторяется и запускается пере той самый промежуток времени. 


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Golda
Дата 15.7.2007, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 3
Всего: 42



Ну, если речь идет о шаред хостинге и inittab и cron не подойдут. Тогда только какой-нибудь вариант lock

Добавлено через 51 секунду
shared memory и семафоры, думаю, стоит использовать. Для того и предназначены


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
-=Ustas=-
Дата 15.7.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Цитата(Jema @  11.7.2007,  00:03 Найти цитируемый пост)
Все круто.... только если не произойдет по каким либо причинам 
//... удаление файла loaded.status ...
то что будем делать? 


Причина может быть только одна - фатальный вылет скрипта (если ты правильно все напишешь). Но при фатальном выпаде тебе даже и shared memory мало помогут. Поэтому можно флаг делать и на файле и на shared memory.

Это сообщение отредактировал(а) -=Ustas=- - 15.7.2007, 17:11


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1162 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.