PHP скрипт, който работи вечно :)

Търся някои идеи да направя следното. Имам нужда от PHP скрипт за извършване на определено действие за доста дълго време. Това е разширение за CMS и не може да бъде нищо друго освен PHP. Той също така не може да бъде скрипт на командния ред, защото трябва да се използва от обикновени хора, които ще имат само стандартните средства на CMS. Една от опциите е да имате cron задание (повечето прости хостинги го имат), което ще задейства често скрипта, така че вместо да работи дълго време, той може да изпълнява действието стъпка по стъпка, запазвайки състоянието си от едно стартиране до следващо. Това не е перфектно, но не виждам други решения. Ако скриптът пренасочва към себе си, сървърът ще го прекъсне. Какви други опции могат да отговарят?

Благодаря на всички предварително!


person AndreyM    schedule 04.02.2012    source източник
comment
Добре, ние не искаме вашите благодарности предварително, искаме вашите благодарности след факта ;)   -  person andrewtweber    schedule 04.02.2012
comment
Функционалността в PHP не се премахва просто за една нощ. Повече от вероятно е вашият CMS (в зависимост от сложността) да се повреди поради надстройки на PHP, преди вашият скрипт да го направи.   -  person kba    schedule 04.02.2012


Отговори (2)


Това, за което говорите, е демон или дълго работеща програма, която чака обаждания от клиентски програми, изпълнява и действа, предоставя отговор, след което продължава да чака още обаждания.

Може да сте запознати с тях под формата на Apache & MySQL ;) Както и да е, PHP като цяло е ОК в това отношение, той има способността да функционира върху необработени сокети, както и да разклонява подпроцеси, за да обработва множество заявки едновременно.

Като казах, че PHP демоните са инструмент, където YMMV. Някои хора ще кажат, че работят страхотно, други хора като мен ще кажат, че имат проблеми с междупроцесната комуникация и изтичане на памет дори сред множество извиквания на unset().

Както и да е, вероятно няма да можете да разположите демон от какъвто и да е тип в споделена хостинг среда. Ще трябва да вземете по-добър сървърен пакет или да се придържате към базирано на Cron решение.

Ето връзка за писане на PHP демон.

Също така, още една забележка. Демоните се сриват от време на време и затова все пак може да се наложи да съхранявате състояние за случващото се, само в случай че някой се спъне в захранващия кабел към споделения ви сървър :)

person quickshiftin    schedule 04.02.2012
comment
Благодаря. Това е добър вариант, но тъй като ще бъде част от широко разпространен софтуер, повечето хора няма да могат да стартират скрипта като php демон - person AndreyM; 04.02.2012
comment
Добре, това е добре, но по същество това е програма, която „работи вечно“. Ако мислите за широко разпространение, тогава може дори да зачеркнете cron от списъка, ако Windows е желаната платформа. Има някои техники за емулиране на дълго работещи програми в Apache вижте тук, но най-добре е да ги оставите на кратки програми. Всеки, който има root достъп в системата *nix, може да стартира/инсталира демон. Ако споделените хостинг системи са целта на софтуера, cron вероятно е правилният начин. - person quickshiftin; 04.02.2012
comment
Да, знам какво е демон, би било наистина страхотна опция, освен ако не е за хора, които могат да изтеглят разширение и да го инсталират само чрез стандартните средства на CMS (изберете файл с разширение и натиснете Инсталиране). - person AndreyM; 04.02.2012

Бих предложил също да помислите дали да го направите демон, но ако не, можете просто да използвате

 set_time_limit(0);
 ignore_user_abort(true); 

в горната част, за да му кажете да не прекъсва и да не бъде прекъсван от нищо. След това го извикайте от cron, за да го стартирате всеки ден или каквото и да е. Имам това при много дълги ежедневни задачи и работи чудесно за мен. Въпреки това, той няма да може лесно да говори с външния свят (други скриптове не могат да го запитват или нещо подобно - ако това е, което искате, погледнете php услугите), така че след като го стартирате, уверете се, че ще спре и накарайте го да отпечата напредъка си в лог файл.

person hackartist    schedule 04.02.2012
comment
И аз имах предвид това, но се чудя дали хостинг доставчиците наблюдават своите сървъри, за да открият и прекъснат такива скриптове. Също така се чудя дали има начин хостинг доставчиците да деактивират възможността за промяна на опциите, които споменахте. - person AndreyM; 04.02.2012