Cronjob PHP-script stopt soms voortijdig (update)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Belastingdienst - Freelance Applicatieontwikkelaar

Startdatum: 01.06.2023 Richttarief: €65,00 - €75,00 Duur van de opdracht: 6 maanden Uren per week: 36 Taal: Nederlands vereist! Gelieve in het Nederlands te solliciteren. Hybride. Kantoordagen in Utrecht, incidenteel in Apeldoorn Functieomschrijving: De afdeling IV – Generieke Voorzieningen – Interactie Online is onderdeel van de keten Interactie. De missie van de keten is: “het faciliteren van de interactie met alle burgers, bedrijven en hun vertegenwoordigers om hen in staat te stellen aan hun fiscale verplichtingen te voldoen en aanspraak te maken op hun rechten.” De afdeling Interactie Online heeft een belangrijke bijdrage binnen deze keten. Dit door het ontwikkelen

Bekijk vacature »

Low Code Developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Voor een leuke opdrachtgever in omgeving Capelle aan den IJssel zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten in heel het land! Wat ga je hier zoal doen? Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je

Bekijk vacature »

Low Code Developer voor o.a. overheidsprojecten!

Bedrijfsomschrijving Wil jij ook behoren tot de specialist in Low Code? Dan zou ik zeker aanraden om verder te lezen. Deze organisatie is ooit opgericht door twee studenten en is inmiddels uitgegroeid tot een serieuze werkgever met een groot aanzien op Low Code projecten. De sfeer is echter niet veranderd, er heerst een informele sfeer met een open deuren beleid, en hierin mag de eigen bar natuurlijk niet ontbreken. Momenteel maakt deze organisatie een flinke groei door en hier kan jij natuurlijk niet bij ontbreken. Daarom ben ik op zoek naar Low Code Developers met een degelijke technische achtergrond. Kennis

Bekijk vacature »

.NET Developer

Functie omschrijving Jij gaat in de functie van Software Developer werken met C# en .NET framework. Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met back-end development. Verder staat dit

Bekijk vacature »

Front-end Angular developer

Functie In jouw rol als Front-End developer werk je samen met de backend developers om middels tweewekelijkse sprints het platform naar een hoger niveau te tillen. Hiernaast heb je affiniteit met data en werk je graag samen met het team om de gegevensintegriteit en -beveiliging te waarborgen, om ervoor te zorgen dat de gebruiker wereldwijd de beste SaaS-services heeft. Deze organisatie heeft meer dan 100 mensen in dienst, waarvan er 45 in Nederland werken. Het ontwikkelteam bestaat uit 10 mensen en is verdeeld in 2 scrumteams. Het eerste team bestaat uit Java en Scala ontwikkelaars. Het tweede team, waar jij

Bekijk vacature »

PHP developer - Digital Agency

Functie Het team telt momenteel 20 collega’s, bestaande uit developers (front- en backend) en het operations team, waaronder ook het management en twee scrum masters vallen. Ze zijn op zoek naar een PHP developer die in staat is zelfstandig te werken. Je komt te werken in één van de drie scrumteams en gaat aan de slag met een project voor de klant. Het fijne hieraan is dat je wel afwisseling hebt qua werk, maar tegelijkertijd doorlopend werkt voor bestaande klanten. Hierdoor krijg je ook de kans om echt de diepte in te gaan en innovatieve technische oplossingen neer te zetten.

Bekijk vacature »

Productontwikkelaar Food

Wat ga je doen Als Productontwikkelaar Food ga je nieuwe producten ontwikkelen en bestaande producten verbeteren. Je bent hierbij betrokken bij het gehele proces: van productconcept naar proefreceptuur, het realiseren va het product (op kleine schaal) en het testen van producten in een productieomgeving. Verder: Bewaak je de status van verschillende fases van productontwikkeling en lever je tijdig de benodigde data aan Ben je bezig met de optimalisatie van oude en nieuwe recepturen Begeleid of organiseer je proefsessies (sensorisch onderzoek) in het team en/of bij klanten Onderhoud je contacten met de klanten, leveranciers van grondstoffen e.a. externe partijen Houd je

Bekijk vacature »

Software Ontwikkelaar C# .NET

Functie omschrijving Startende Software Ontwikkelaar gezocht met kennis van C# .NET! Ben jij net klaar met je opleiding en ben je op zoek naar je eerste echte werkervaring? Of heb jij al enige werkervaring maar ben toe aan iets nieuws? Dan is dit de perfecte kans voor jou! Wij zoeken namelijk een Junior Software Ontwikkelaar die klaar is voor een nieuwe uitdaging bij een leuke werkgeven in de regio Zeist. In deze functie werk jij vaak aan verschillende projecten en ga je bij klanten op bezoek. Ben jij op zoek naar een functie met uitdaging, diversiteit en verantwoordelijkheid? Dan is

Bekijk vacature »

Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Opleveren van mooie eindproducten, middels de Agile methodiek; Samenwerken in een team van 10 collega's; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven. De

Bekijk vacature »

SQL Developer

Functie omschrijving We are looking for a dutch native speaker Jij gaat in deze functie aan de slag met uitdagende projecten en het creëren van maatwerk software, vooral middels SQL. Iedere klant/project is weer anders, maar dat maakt dit bedrijf en de functie erg uniek & uitdagend. Verder heb je de volgende taken: Ontwikkelen en ontwerpen van SQL databases. T-SQL wordt hierbij gebruikt als programmeer laag; Optimalisatie van query's, voor een verbeterde efficiency; Begeleiden van junior developers, mits je dit leuk vindt; Heb je meer interesse in een rol als consultant, dan is dit ook mogelijk. Je heb hier meer

Bekijk vacature »

OutSystems Developer

Dit ga je doen Het van scratch af aan ontwikkelen van applicaties met OutSystems; Het aanhaken bij diverse projecten binnen de organisatie; Schakelen met de business; Meedenken over de mogelijkheden van het platform binnen de organisatie. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap, bestaande uit standaard- en maatwerkapplicaties. De maatwerkapplicaties worden ontwikkeld door een inhouse development team. Het doel voor de komende periode is het verder vernieuwen en optimaliseren van het huidige applicatielandschap. Zo staat de organisatie aan

Bekijk vacature »

Delphi developer

Functie Als Delphi developer ga jij aan de slag in een team met twee andere ervaren Delphi programmeurs waaronder de Hoofd programmeur. Als team zijn jullie verantwoordelijk voor de doorontwikkeling van jullie bestaande applicatie. Daarnaast zijn jullie verantwoordelijk voor het onderhouden van deze applicatie en het oplossen van eventuele bugs. Eisen - HBO werk en denk niveau; - Minimaal één jaar ervaring met Delphi; - Goede beheersing van de Nederlandse taal in woord en geschrift; - Jij bent zelfstandig, maar kan ook in team verband werken. Aanbod - €3000,-- €4000,- op basis van jouw kennis en ervaring; - 8% vakantiegeld;

Bekijk vacature »

Senior Java Developer

Als Senior Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en

Bekijk vacature »

Oracle Developer / PL SQL

Dit ga je doen Software ontwikkeling aan een internationaal gebruikt pakket; Werken met technieken als Oracle 19c, Toad, PL/SQL, Oracle Forms, Reports en Designer; Meedraaien in internationale projecten; Meedenken over technisch en functioneel ontwerp; Samenwerken met collega's als Informatie Analisten, Testers en Release Managers; Soms wensen en eisen afstemmen met de business. Hier ga je werken Onze klant, een internationaal bekend bedrijf dat essentiële producten maakt waar iedereen graag gebruik van maakt, zoekt versterking in het Software Development team. Samen met 3 developers, een release manager, een informatie analist en 3 testers werk jij aan een systeem waarmee complexe producten

Bekijk vacature »

Medior C# Developer

You'll build modern applications for Coolblue's back office. We have a lot of friends, and they crave well-structured data and user-friendly, task-focused applications. How do I become a Medior C# Developer at Coolblue? You regularly participate in brainstorm sessions about user experience, data, and task flow with the UX Designer, Product Owner, and Data Scientists in your team. Besides that you will create disconnected, highly congruent, and testable code that can easily be maintained and is future-proof. Want to become C# Developer at Coolblue? Read below if the job suits you. You enjoy doing this Working with various types of

Bekijk vacature »
G Jansma

G Jansma

20/03/2017 15:47:19
Quote Anchor link
Hallo,

Ik heb een PHP-script gemaakt dat wordt uitgevoerd dmv een cronjob, maar hij stopt soms voortijdig op onverklaarbare wijze. Ik gebruik een for-loop om data te scrapen (niks illegaals) van pagina's die vrijwel identiek zijn. Als het script is afgerond krijg ik dan een mail met hoeveel pagina's hij heeft nagelopen. 9 van de 10 keer gaat het perfect, maar soms komt het dus voor dat hij het eind van het script niet haalt, en maar een beperkt deel van het aantal loops uitvoert. Als ik dan kijk bij welk nummer hij is gestopt dan is daar geen aanwijsbare reden voor te vinden.

Ik had al wat nagezocht en het volgende in de code gestopt om een timeout te voorkomen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4


Ik zal de hele code besparen, het is ook niet veel bijzonders, maar de loop ziet er als volgt uit. In elke loop maak ik opnieuw connectie met de database zodat die geen timeout geeft.

- Connectie maken met MySQL database
- Data escapen
- Data invoeren
- Updaten in database welke hij laatst heeft gehad
- Connectie verbreken

Ik heb de opdracht opgeknipt in brokjes, maar wat zou de reden kunnen zijn dat hij tussentijds stopt? En is er een mogelijkheid om dat in die mail terug te kunnen zien? Kan het nog steeds door connectie-verlies komen? Een error bij de betreffende insert lijkt me onmogelijk, en dan moet hij volgens mij ook gewoon verdergaan. De laatste keer stopte hij al na 30 loops, terwijl hij er normaal 5000 doet. Hij doet ongeveer vijf loops per seconde.

Ik heb de cronjob ingesteld vanuit DirectAdmin, dus die hele technische taal mbt de cronjob/logs etc en waar ik dat zou moeten invullen is me niet helemaal eigen.


Ik hoop dat jullie me kunnen helpen.
Gewijzigd op 21/03/2017 15:31:21 door G Jansma
 
PHP hulp

PHP hulp

14/02/2025 19:51:29
 
- Ariën  -
Beheerder

- Ariën -

20/03/2017 15:49:39
Quote Anchor link
Hoe voer je de cornbjob uit? Met welk commando?
Voer je het script dus direct aan PHP, of laat je het via bijv. wget eerst nog via de webserver lopen?
 
G Jansma

G Jansma

20/03/2017 15:57:53
Quote Anchor link
- Ariën - op 20/03/2017 15:49:39:
Hoe voer je de cornbjob uit? Met welk commando?
Voer je het script dus direct aan PHP, of laat je het via bijv. wget eerst nog via de webserver lopen?


Gewoon in DirectAdmin ingevoerd met die sterretjes. En bij command staat:
/usr/local/bin/php -q -f/home/username/domains/domeinnaam.nl/public_html/phpdocument.php
 
- Ariën  -
Beheerder

- Ariën -

20/03/2017 16:05:44
Quote Anchor link
Direct aan PHP dus. Heb je al de output naar een log geschreven?
 
Ben van Velzen

Ben van Velzen

20/03/2017 16:21:35
Quote Anchor link
En vooral: staat error reporting (en display_errors) aan (borkt hij niet gewoon op geheugen)?
 
- Ariën  -
Beheerder

- Ariën -

20/03/2017 16:28:25
Quote Anchor link
Wat Ben zegt, en dan de boel goed loggen! Desnoods ook even het geheugen timen, en kijken of hij daar ergens op spaak loopt.
 
G Jansma

G Jansma

20/03/2017 16:37:47
Quote Anchor link
Nu wordt het wel vrij technisch. Ik ben een beginner, dus nog niet helemaal thuis op dit gebied.

@Ariën: Nee. Ik las dat het verstandig was om een log te hebben van wat de cronjob doet. Maar die 'html' van de pagina stuurt hij naar de mail, dat is de log?

@Ben: Volgens mij wel, maar dat kan ik voor de zekerheid aanzetten met onderstaande?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>


En wat betekent 'borkt hij niet gewoon op het geheugen'?

@Ariën2: Zou je misschien kunnen uitleggen hoe dat moet?
Gewijzigd op 20/03/2017 16:38:53 door G Jansma
 
Ben van Velzen

Ben van Velzen

20/03/2017 16:47:03
Quote Anchor link
Je kunt het gewoon met de standaard reporting regels aanzetten ja. Vaak is de cli php configuratie anders dan de web configuratie, dus het is altijd mogelijk dat cronjobs afwijken van websites.

>> En wat betekent 'borkt hij niet gewoon op het geheugen'?
Schiet je niet gewoon door de geheugenlimiet?
 
- Ariën  -
Beheerder

- Ariën -

20/03/2017 17:04:05
Quote Anchor link
De log is de complete output van je script. Die wordt nu dus ook gemaild, dat volstaat dat ook. In ieder geval bedoel ik wel de hele output welke je anders in je browser ook zou zien. Staan daar foutmeldingen in (zet wel je error_reporting hoog en display_errors aan)

Tevens raad ik niet aan om cronjobs in de public_html te plaatsen. Je wilt toch niet dat jan en alleman ze kunnen uitvoeren?
 
G Jansma

G Jansma

20/03/2017 17:08:49
Quote Anchor link
Ben van Velzen op 20/03/2017 16:47:03:
Je kunt het gewoon met de standaard reporting regels aanzetten ja. Vaak is de cli php configuratie anders dan de web configuratie, dus het is altijd mogelijk dat cronjobs afwijken van websites.

>> En wat betekent 'borkt hij niet gewoon op het geheugen'?
Schiet je niet gewoon door de geheugenlimiet?


Ik heb er niet veel verstand van, maar dat denk ik niet. Volgens mij is er niet veel geheugen benodigd voor wat ik doe. Zou zoiets ook als error worden gemeld? En hoe valt dat te meten/timen?


@Ariën: Daar zit wat in, maar als beginner zet ik alles in public_html. In welke map zou ik dat moeten zetten dan, of kan je een cronjob in elke map zetten? Ik had dat probleem met onderstaande PHP gedicht.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?

$sapi_type
= php_sapi_name();
    if(substr($sapi_type, 0, 3) == 'cli' || empty($_SERVER['REMOTE_ADDR'])) {

//En de rest van de code hier

}
?>
Gewijzigd op 20/03/2017 17:14:51 door G Jansma
 
Ben van Velzen

Ben van Velzen

20/03/2017 17:17:37
Quote Anchor link
>> Ik heb er niet veel verstand van, maar dat denk ik niet. Volgens mij is er niet veel geheugen benodigd voor wat ik doe. Zou zoiets ook als error worden gemeld? En hoe valt dat te meten/timen?

Als je reporting aan hebt staan wel, anders stopt je script op een ogenschijnlijk willekeurig moment. Je kunt het meten door regelmatig memory_get_peak_usage aan te roepen, en dit te vergelijken met je memory_limit.
Gewijzigd op 20/03/2017 17:18:09 door Ben van Velzen
 
- Ariën  -
Beheerder

- Ariën -

20/03/2017 17:22:51
Quote Anchor link
G Jansma op 20/03/2017 17:08:49:
@Ariën: Daar zit wat in, maar als beginner zet ik alles in public_html. In welke map zou ik dat moeten zetten dan, of kan je een cronjob in elke map zetten? Ik had dat probleem met onderstaande PHP gedicht.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?

$sapi_type
= php_sapi_name();
    if(substr($sapi_type, 0, 3) == 'cli' || empty($_SERVER['REMOTE_ADDR'])) {

//En de rest van de code hier

}
?>

Opsich zou dit kunnen werken, maar voor de zekerheid zou ik het buiten je /public_html plaatsen. Een mapje hoger zou kunnen. Eventueel kan je ook met .htaccess alle toegang tot de directory via de webserver afvangen als je binnen je /public_html wilt blijven. Met PHP kan je er toch wel bij komen omdat het via het file-systeem gaat.

Om even duidelijkheid te schappen in de term 'cronjob'. Dit is de taak zelf die je aanmaakt in Directadmin (of via crontab -e in de CLI). Wat je laat uitvoeren is altijd het script.
 
Thomas van den Heuvel

Thomas van den Heuvel

20/03/2017 17:42:30
Quote Anchor link
G Jansma op 20/03/2017 17:08:49:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
$sapi_type
= php_sapi_name();
    if(substr($sapi_type, 0, 3) == 'cli' || empty($_SERVER['REMOTE_ADDR'])) {
//En de rest van de code hier
}
?>

Dus eerst zet je je code op een onhandige plaats, en vervolgens timmer je het gat dat je op deze manier zelf creëert weer dicht? :/
 
- Ariën  -
Beheerder

- Ariën -

20/03/2017 17:45:43
Quote Anchor link
Misschien dat het een bestaand script is, waarbij de maker natuurlijk niet kan weten of iemand kan 'ontsnappen' uit zijn webroot. Maar ik blijf er bij dat zulke ranzige checks overbodig zijn, en dat crons buiten de webroot moeten worden gedraaid, of anders in een dichtgetimmerde directory in de webroot.
Dan hoef je met PHP niks meer dicht te timmeren.
 
G Jansma

G Jansma

20/03/2017 18:13:47
Quote Anchor link
Dat stukje code had ik bij Stackoverflow (http://stackoverflow.com/questions/190759/can-php-detect-if-its-run-from-a-cron-job-or-from-the-command-line) gevonden. Was dus wel iets waar ik over had nagedacht om het af te schermen, maar zal in het script voor een Cronjob (ik zal het terminologisch goed proberen te doen) in een map hoger zetten. Weer wat geleerd.

Ik ga die memory usage erin zetten, de errors allemaal aan en dan loggen, en dan zie ik wel of het weer gebeurd. In de laatste 20x ging het iets van 2x fout, dus het zal vast nog wel eens misgaan.

Bedankt voor de hulp allen, ik laat het wel weten wat eruit komt.

Toevoeging op 21/03/2017 15:27:09:

Update
Nou, hij is inmiddels drie keer voortijdig gestopt. Helaas geeft hij geen error op het moment dat hij stopt in de output. Na de eerste keer heb ik maar geprobeerd om iets beter te kunnen lokaliseren waar het mis ging door middel van wat extra echo's.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

    echo "a";
        
    $url = "http://url.nl/$i";
    $output = file_get_contents($url);

    echo "b";

    $con = mysqli_connect(- - - -);
    if (!$con) {die("Connection failed: " . mysqli_connect_error());}
    
    echo "c";

?>


De eerste keer ging het mis tussen a en b (na 3000 loops), de tweede keer tussen b en c (na 400 loops). Beide keren zonder error. En bij die eerste keer ligt het ook niet aan de pagina, want als ik hem opnieuw opstart gaat hij daar vrolijk verder. En als de connectie was gefaild had hij een error moeten geven. Het lijkt me een beetje random waar hij ermee stopt.

Ook aan de memory_peak_usage kan het volgens mij nooit liggen. Ik echo die elke loop, maar was in de eerste 301816 en in de tweede 300056 terwijl de memory_limit 256MB is zegt ie.

Waar zou het dan aan kunnen liggen? En zijn er mogelijkheden om nog beter te loggen? Ik las iets met '2>&1' maar ik heb geen idee waar ik dat zou moeten invoeren, en waar ik dat dan terug zou kunnen vinden.
Gewijzigd op 21/03/2017 15:27:57 door G Jansma
 
- SanThe -

- SanThe -

21/03/2017 15:40:44
Quote Anchor link
Als dit bytes zijn: 301816, dan is dat toch meer dan 256MB?
 
G Jansma

G Jansma

21/03/2017 15:48:50
Quote Anchor link
- SanThe - op 21/03/2017 15:40:44:
Als dit bytes zijn: 301816, dan is dat toch meer dan 256MB?


Volgens die PHP.net is memory_get_peak_usage in bytes.

301 816 bytes =
0.301816 megabytes
 
- SanThe -

- SanThe -

21/03/2017 15:52:48
Quote Anchor link
301816 / 1024 = 294,7421875 MB
Ik maak een foutje, sorry.
Gewijzigd op 21/03/2017 15:56:28 door - SanThe -
 



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.