| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Проверка запуска экзепляра скрипта |
| Автор: DIAgen.G 3.3.2007, 12:23 |
| Вот в чем пробема, есть скрипт, который запускается через каждые 30-90 минут через CRON, а возможно ли как-нибудь при помощи PHP при запуске скрипта проверить если он уже запущен, то просто делаем DIE(), если нет то тогда запускаем скрипт? |
| Автор: Всемогущий 3.3.2007, 12:39 |
| |
| Автор: skyboy 3.3.2007, 12:58 |
| для Windows-платформ такое недоступно, но есть в PHP http://www.php.net/sem. |
| Автор: DIAgen.G 3.3.2007, 13:05 | ||
Только вот только одно, если скрипт завершился критически он не успее не занести в базу или записать в файл даные! Может и ошибаюсь((( Добавлено @ 13:15 Еще, пропустил, этот скрипт должен все время весеть в памети, получается вроде сервиса должен быть! |
| Автор: boombick 4.3.2007, 20:39 | ||
да и лучше использовать для создания демона более приспособленные для этого языки и не забивать гвозди микроскопом |
| Автор: CyClon 14.4.2007, 12:43 | ||
Вот такая вот идейка... |
| Автор: Jema 11.7.2007, 00:03 |
| Все круто.... только если не произойдет по каким либо причинам //... удаление файла loaded.status ... то что будем делать? |
| Автор: lorien 11.7.2007, 16:26 |
| Очень просто, открываешь файл и лочишь его. При следующем запуске проверяешь, если файл залочен, значит скрипт живой. |
| Автор: Fally 11.7.2007, 16:49 |
| А может попробывать его popen()'ом? Если вернулся ресурс, тогда die(), если нет - пусть скрипт себе работает... |
| Автор: Golda 12.7.2007, 18:21 |
| Если я правильно поняла, требуется, чтобы скрипт работал всегда в единственном экземпляре, а по завершении работы вызывался новый instance. Для Unix/Linux можно прописать его вызов в /etc/inittab с флагом respawn |
| Автор: lorien 14.7.2007, 11:45 |
| Скорее всего человек хочет пускать скрипты на шаред хостинге, вряд ли там пров даст ему /etc/inittab править ) |
| Автор: Diesel Draft 15.7.2007, 10:47 |
| Извините, выше не читал. У меня идея. При запуске скрипт можно убить свою запись крон, а на конце опять запустить. Вы точно будете знать что он не повторяется и запускается пере той самый промежуток времени. |
| Автор: Golda 15.7.2007, 12:27 |
| Ну, если речь идет о шаред хостинге и inittab и cron не подойдут. Тогда только какой-нибудь вариант lock Добавлено через 51 секунду shared memory и семафоры, думаю, стоит использовать. Для того и предназначены |
| Автор: -=Ustas=- 15.7.2007, 17:10 | ||
Причина может быть только одна - фатальный вылет скрипта (если ты правильно все напишешь). Но при фатальном выпаде тебе даже и shared memory мало помогут. Поэтому можно флаг делать и на файле и на shared memory. |
| Автор: Golda 15.7.2007, 17:29 |
| На случай таких единичных сбоев, стоит ориентироваться не на просто на сам факт существования lock, а на время его создания. И если это время превышает разумное, считать такой lock следствием сбоя и игнорировать |
| Автор: Diesel Draft 15.7.2007, 18:06 |
| Также можно просто на початке робот создавать файл, а в конце его удалять. И каждый раз перевеять есть ли он |
| Автор: Diesel Draft 15.7.2007, 19:30 |
| В файл писать можно каждую минуту, то есть чтоб данные актуальные оставались |
| Автор: lorien 15.7.2007, 23:03 |
| Для слабослыщащих повторяю свой предыдущий пост: открываете и лочите файл, если процесс умрёт, то лок потеряется. |
| Автор: Diesel Draft 16.7.2007, 01:19 |
| lorien, а ты проверял? |
| Автор: CyClon 3.8.2007, 13:03 |
| По сабжу - скрипт при запуске создает какой-либо файл, при окончании работы - удаляет его. В начале скрипта - if (file_exixts())... |
| Автор: Oflashp 3.8.2007, 15:17 |
| Использую метод протоколирования. Запускается более сотни скриптов. Сбоев не было. |
| Автор: Anarki 5.8.2007, 17:03 | ||
| lorien правильно сказал, так лучше всего делать. Например:
Только если под апачем запущен скрипт, то могут быть косяки. Поэтому вообще долгоиграющие скрипты лучше из консоли запускать. |