Script automatisch stoppen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frits Dalen

Frits Dalen

04/09/2019 12:41:40
Quote Anchor link
wie kan mij helpen om een script dat telkens opnieuw word uitgevoerd via een lus na 65 minuten te laten stoppen.
 
PHP hulp

PHP hulp

16/04/2024 06:00:12
 
- Ariën  -
Beheerder

- Ariën -

04/09/2019 12:58:47
Quote Anchor link
Zonder inhoudelijke informatie is het lastig om een goed antwoord te geven.

- Welk operating systeem?
- Hoe voer je het uit?

En nog belangrijker:
- Waarom stopt het niet automatisch?
 
Frits Dalen

Frits Dalen

04/09/2019 13:03:59
Quote Anchor link
Het is ook de bedoeling dat het script door draait.
Ik zoek iets met time() en het dan over de opgeven tijd te laten stoppen

Ik voer het uit via de brouwser
 
- Ariën  -
Beheerder

- Ariën -

04/09/2019 13:08:07
Quote Anchor link
En wat als je halverwege (per ongeluk) de browser afsluit? Dan heb je dus een half uitgevoerd script en mogelijke inconsistentie in je data die je verwerkt.

Of gebruik je ignore_user_abort()?

Welk operating system wordt er gebruikt op de server?
 
Frits Dalen

Frits Dalen

04/09/2019 13:10:26
Quote Anchor link
Als ik halverwege afsluit werkt het niet meer vandaar dat ik graag de tijd wil opgeven bijv. /3600

Op de sever draait Linux
 
- Ariën  -
Beheerder

- Ariën -

04/09/2019 13:14:36
Quote Anchor link
Waarom draai je het niet via een cronjob?
Die draait op de achtergrond op de server. Zorg er wel voor dat het script netjes beëindigd wordt als iets niet goed gaat of de transactie (waarvan ik hoop dat je die gebruikt) een 'roll-back doet'.
Gewijzigd op 04/09/2019 13:15:18 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

04/09/2019 13:15:02
Quote Anchor link
Direct bovenaan in je PHP script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
set_time_limit(65 * 60)
En er dan vanaf blijven (geen nieuwe time-out instellen).

Bij een cron-job (CLI aanroep) staat de timeout standaard op "oneindig", en dan blijft ie dus door draaien.

Toch zou het netter zijn om bijvoorbeeld na elke "stap" (ik neem aan dat het script iets in herhalende stappen doet) even te kijken hoe lang je al bezig bent (time() nu tov bij aanvang), en dan na 65 * 60 seconden niet meer aan een nieuwe stap te beginnen, maar gewoon netjes af te sluiten.
Gewijzigd op 04/09/2019 13:16:25 door Rob Doemaarwat
 
- Ariën  -
Beheerder

- Ariën -

04/09/2019 13:17:41
Quote Anchor link
Als je niet via een cronjob kan draaien. Houd dan wel netjes bij welke te verwerken items je al wel hebt verwerkt. Als er iets misgaat, dan kan je weer verder gaan waar je gebleven was.

Maar mijn voorkeur gaat uit naar cronjobs. Die draaien gewoon oneindig door (waarom is dat weggestreept?)
Gewijzigd op 04/09/2019 13:18:33 door - Ariën -
 
Frits Dalen

Frits Dalen

04/09/2019 13:26:09
Quote Anchor link
set_time_limit(65 * 60)

betekend set_time_limit(2 * 60)dat het script 2 minuten draait? (dit om het testen te verkorten)
 
- Ariën  -
Beheerder

- Ariën -

04/09/2019 13:30:45
Quote Anchor link
Klopt. En de andere is 3900 sec = 65 minuten.
 
Frits Dalen

Frits Dalen

04/09/2019 13:32:38
Quote Anchor link
Bedankt voor jullie reacties, ik ga er mee aan het stoeien
 
- Ariën  -
Beheerder

- Ariën -

04/09/2019 13:34:48
Quote Anchor link
Mocht je ooit denken om ignore_user_abort() te gebruiken. Zorg er dan wel voor dat je dan wel de mogelijkheid hebt om in de CLI het script te kunnen killen, als het uit de hand loopt.
Gewijzigd op 04/09/2019 13:35:11 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

04/09/2019 15:37:43
Quote Anchor link
Een betere vraag is wellicht: waarom is het nodig dat dit script continu actief is, en kun je dit niet omschrijven naar een variant die beter geschikt is voor periodieke aanroep, of is dit niet mogelijk, en als dat het geval is, waarom niet? Mogelijk komt dan aan het licht dat je misschien wel een verkeerde insteek hebt gekozen en dat je vervolgens hemel en aarde moet bewegen om dit iets werkbaars te laten zijn.

Oftewel, vertel eens wat meer waarom dit alles nodig zou zijn.

En als dan toch blijkt dat je zoiets nodig hebt, dan moet je meer op zoek naar een soort van persistente variant. Als je een script start vanaf de shell dan is deze gewoon permanent op de achtergrond actief.

5 seconden Googlen, eerste resultaat leverde mij al een thread op met een heleboel links naar meer informatie.

Dan nog het volgende: het schrijven van een PHP daemon is bepaald geen sinecure als je de eerste link uit het eerdere artikel volgt. Volgens mij is daar de strekking dat je ook voorzieningen moet treffen hoe je deze daemons regelt, en dat het daemon script zelf ook met allerlei nuances rekening moet houden (met als belangrijkste wellicht server resources (geheugen en CPU)). Dit is nou niet bepaald doorsnee PHP, maar het kan.

Misschien is dat ook een argument om te kijken of je dit in eerste instantie met een "simpele" cronjob kunt regelen.

Maar om je dit advies te kunnen geven is het natuurlijk handig dat je wat meer uitleg geeft over wat je precies probeert te bereiken...

"Ik voer het uit via de browser" klinkt ook niet erg jofel. Betekent dit dat iedereen dit kan doen? Betekent dit dat je je computer/browser hiervoor aan/open moet laten staan? :/

Er moet toch wel een betere manier zijn om zoiets te automatiseren?
 
Rob Doemaarwat

Rob Doemaarwat

04/09/2019 16:05:36
Quote Anchor link
- Ariën - op 04/09/2019 13:17:41:
waarom is dat weggestreept?

Ik ging er eigenlijk vanuit dat het iets van een cron-job was (als het om 65 minuten gaat ...), maar toen las ik dat ie het via de browser aanriep.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/09/2019 16:14:05
Quote Anchor link
Mja, maar we moeten echt af van de notie dat mensen altijd weten wat ze aan het doen zijn ;). Eerst moeten we vaststellen of de weg die is ingeslagen wel een zinvolle is. Dit kunnen we alleen weten met voldoende informatie en een motivatie. Beide ontbreken op dit moment. Daarna kunnen we pas (in eerste instantie) een waardeoordeel vellen en eventueel een remedie voorschrijven of moeten we toch echt concluderen dat de aanpak anders moet.

Wij zitten hier niet enkel om te faciliteren en vragenstellers met een kluitje het riet in te sturen, het is (ook) onze taak om ze te adviseren. Te vaak is hier "mensen op weg helpen" synoniem met "ze versneld het ravijn in laten rijden".
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.