![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
DIAgen.G |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 18.2.2007 Репутация: нет Всего: нет |
Вот в чем пробема, есть скрипт, который запускается через каждые 30-90 минут через CRON, а возможно ли как-нибудь при помощи PHP при запуске скрипта проверить если он уже запущен, то просто делаем DIE(), если нет то тогда запускаем скрипт?
|
|||
|
||||
Всемогущий |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 25.6.2006 Где: Челябинск Репутация: нет Всего: 13 |
![]() Это сообщение отредактировал(а) Всемогущий - 3.3.2007, 13:03 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
для Windows-платформ такое недоступно, но есть в PHP функции по работе с семафорами.
|
|||
|
||||
DIAgen.G |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 18.2.2007 Репутация: нет Всего: нет |
Только вот только одно, если скрипт завершился критически он не успее не занести в базу или записать в файл даные! Может и ошибаюсь((( Добавлено @ 13:15 Еще, пропустил, этот скрипт должен все время весеть в памети, получается вроде сервиса должен быть! Это сообщение отредактировал(а) DIAgen.G - 3.3.2007, 13:06 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
DIAgen.G, целевая платформа - *nix или Windows? если windows - то в модуле win32 есть функции, позволяющие создать сервис на основе php - скрипта. для *nix как создать демона - не знаю, скорее всего, такого нет в 5 версии.
для этого можно заюзать поле "последнее обращение", вроде timeout'a. ты же сам говоришь, что скрипт запускается через фиксированные промежутки времени. кроме того, можно сделать не просто проверку "тут какой-то флаг в БД установлен, значит, место занято", а записать в некую заранее определенную область(файл, опять же, или БД) некий запрос "ты ещё жив?" и если в timeout-промежуток придет ответ "да, не мешай"(опять же - в некую определенную заранее область - файл, БД, семафор), то второй экземпляр отключится. если же ответ не придет, то считаем первый процесс пропавшим без вести и начинаем свое черное дело ![]() |
|||
|
||||
boombick |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 20.4.2005 Где: Moscow, Russia Репутация: нет Всего: 9 |
да и лучше использовать для создания демона более приспособленные для этого языки и не забивать гвозди микроскопом -------------------- |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Вот такая вот идейка... |
|||
|
||||
Jema |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 11.12.2003 Репутация: нет Всего: нет |
Все круто.... только если не произойдет по каким либо причинам
//... удаление файла loaded.status ... то что будем делать? |
|||
|
||||
lorien |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 16.11.2004 Где: omsk Репутация: нет Всего: 3 |
Очень просто, открываешь файл и лочишь его.
При следующем запуске проверяешь, если файл залочен, значит скрипт живой. |
|||
|
||||
Fally |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 17.8.2006 Где: Dahla Репутация: нет Всего: 4 |
А может попробывать его popen()'ом? Если вернулся ресурс, тогда die(), если нет - пусть скрипт себе работает...
|
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
lorien |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 16.11.2004 Где: omsk Репутация: нет Всего: 3 |
Скорее всего человек хочет пускать скрипты на шаред хостинге, вряд ли там пров даст ему /etc/inittab править )
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: нет Всего: 5 |
Извините, выше не читал. У меня идея.
При запуске скрипт можно убить свою запись крон, а на конце опять запустить. Вы точно будете знать что он не повторяется и запускается пере той самый промежуток времени. |
|||
|
||||
Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
-=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: нет Всего: 69 |
Причина может быть только одна - фатальный вылет скрипта (если ты правильно все напишешь). Но при фатальном выпаде тебе даже и shared memory мало помогут. Поэтому можно флаг делать и на файле и на shared memory. Это сообщение отредактировал(а) -=Ustas=- - 15.7.2007, 17:11 -------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |