Cronjob PHP-script stopt soms voortijdig (update)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fullstack ontwikkelaar @ Delft

2021-09-23 iSense Fullstack ontwikkelaar Ben jij een ervaren Fullstack ontwikkelaar? Heb je daarbij ervaring op het gebied van Javascript en .Net Core? Lees dan verder! ISAC48652 Nieuw Organisatie Bij het accepteren van dit aanbod kom je terecht binnen een veelzijdige organisatie waar een goede sfeer hangt. Zij zijn gewend dagelijks met elkaar te lunchen en ruimte is voor een potje Mario. Als Fullstack ontwikkelaar ga je je op projectbasis bezighouden met het ontwikkelen van content voor diverse opdrachtgevers. De projecten waar je aan gaat werken zullen verschillende qua omvang. Hierbij kan je rekening houden met een gemiddelde doorlooptijd van een

Bekijk vacature »

Junior .NET ontwikkelaar @ Regio Eindhoven

2021-10-20 iSense Junior .NET ontwikkelaar Heb je onlangs een hbo-, wo-opleiding of een minor richting de IT afgerond OF heb jij middels cursussen je sporen verdiend in het programmeren en wil je graag aan de slag als Fullstack .NET Developer? Lees dan snel verder! Want in januari/februari 2022 start de Experis Academy weer met een leerprogramma waarin IT-experts je opleiden tot developer met als specialisatie .NET. Dit allemaal met een salaris en een vooruitzicht op een baan bij een topwerkgever. ISLE51106 Locatie Eindhoven e.o. Wat ga je doen als Junior .NET ontwikkelaar? Vanaf januari/februari 2022 krijg jij via de Experis

Bekijk vacature »

Java Ontwikkelaar

Binnen ICT Group werkt de business unit Machine & Systems zich bezig met geavanceerde besturingssystemen voor machine- en apparatenbouwers en voor grote systeemintegratoren. Met je collega’s zorg jij ervoor dat producten optimaal functioneren en connected zijn. Internet of Things, Cloud oplossingen en Big Data zijn niet meer weg te denken uit dit marktsegment. We leveren complete producten (hardware, OS en software applicaties) en zijn van toegevoegde waarde door het uitvoeren van complete projecten met resultaatverantwoordelijkheid op één van onze locaties, door het leveren van kennis en ervaring op locatie van onze klanten én door middel van advies trajecten. Requirements in

Bekijk vacature »

AWS Datawarehouse Developer

Functieomschrijving Are you an experienced AWS Data Warehouse Developer looking for an international, creative and innovative environment? Would you like to work on a self-service data platform, making sure our data makes its way from a vast array of sources to the right place? At the IT department of Randstad Groep Nederland (HQ) we are looking for you! We’re looking for an AWS Data Warehouse Developer available to join our internal team immediately. Data Warehouse at Randstad Groep Nederland (HQ) You are able to determine the direction and, together with the team, to make the right choices for the long

Bekijk vacature »

Back-End Developer

De vacature In je dagelijkse werk focus je je op het ontwerpen, (door-)ontwikkelen en onderhouden van stabiele en schaalbare data services. Hiermee heb je direct invloed op de werking en ontwikkeling van onze bedrijfskritische processen die zorgen voor de vertaling van rauwe (ruimtelijke) data naar kraakheldere ondergrondinformatie en de distributie ervan aan onze klanten en gebruikers via onze apps en APIs. Daarnaast lever je een actieve bijdrage aan de besluitvorming, ontwerp en uitvoering van initiatieven die zich richten op het herontwerpen en optimaliseren van onze architectuur en tech-stack. Zo zorgen we ervoor dat we op technologisch vlak blijven meegroeien met

Bekijk vacature »

Boer zoekt Machine Learning Developer

Bedrijfsomschrijving Dit bijzondere bedrijf uit de regio Nijmegen ontwikkelt applicaties waar wereldwijd boerenbedrijven hun bedrijf mee ondersteunen. Van kleine sympathieke bio-bedrijfjes tot hele mooie grote professionele boerenbedrijven die al jaren gerund worden door dezelfde familie's. We hebben bij dit mooie bedrijf een vacature ervaren Machine Learning expert die toe is aan een nieuwe uitdaging. Ze doen dit voor bedrijven in ons eigen land en tot ver daarbuiten. Er zijn internationale kansen die ze niet voorbij laten gaan en binnen hun sector is het op IT vlak een top-speler. Men richt zich op het moment bijvoorbeeld op Nieuw-Zeeland en ook in

Bekijk vacature »

Senior Developer Mendix (NL)

Senior Developer Mendix (NL) Den Haag HBO/WO IT Professional "Wij zetten Mendix in voor onze kritieke processen om de favoriete bezorger van Nederland te zijn. We zoeken een Mendix Developer die met ons verder bouwt aan de 'digital core' van PostNL" Wat ga je doen? PostNL is a logistical tech company. Als Mendix Developer  kom je te werken in een organisatie waarbij data, technologie en een engineering culture een sleutelrol spelen. PostNL wil 'digital at the core' zijn en daarom staan we aan de voorgrond van het ontwikkelen van onze eigen logistieke software.    In de functie van Mendix Developer

Bekijk vacature »

Slimme Javascript developers met een salariskans v

Bedrijfsomschrijving Voor een leuke klant van mij ben ik opzoek naar een ervaren Javascript Developer. Deze organisatie bestaat bijna 10 jaar en is opgestart door 2 broers. Het gaat om een jong team met een frisse uitstraling. Ze houden zich hier vooral bezig met het bouwen van software voor zelfstandig ondernemers, daarnaast bieden ze support erbij. Er werken ongeveer 20 medewerkers en het IT team bestaat uit 4 ervaren developers. Het gaat om een informeel bedrijf die erg betrokken is met elkaar. Functieomschrijving Je komt te werken in een klein maar prettig en zelfstandig team van 4 developers. Je bouwt

Bekijk vacature »

Senior Front-End Developer

As a Senior Front-end Developer you maintain the balance between creativity and functionality for our webshop, and you coach your fellow developers. How do I become a Senior Front-End Developer at Coolblue? As a Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present this within the team. You are also proud of your work and welcome all feedback. Would you also like to become a Front-End Developer at Coolblue? Read

Bekijk vacature »

Senior AWS Cloud Developer IoT (NL)

Senior AWS Cloud Developer IoT (NL) Den Haag HBO/WO IT Professional PostNL zet trackers in om de logistieke pakkettenstroom realtime te kunnen managen. Met behulp van deze trackers, ookwel beacons genoemd, wordt het mogelijk om de beweging van 250.000 rolcontainers te volgen. Deze 250.000 beacons genereren in real time miljoenen berichten per minuut. Internet of Thing (IoT) is voor PostNL dan ook een belangrijke component in het digitaliseren van het logistieke proces. Wat ga je doen? Binnen het IoT platform vertalen we inkomende dat vanuit de rolcontainer trackers, zoals aankomst- en vertrektijd vanaf een PostNL locatie, naar relevante informatie ter

Bekijk vacature »

Ervaren en junior Python Ontwikkelaar welkom in Ar

Bedrijfsomschrijving Onze opdrachtgever in Arnhem heeft momenteel nog plek voor zowel een junior als een ervaren Python Ontwikkelaar. Woon jij in de regio Arnhem en sta je open voor een functie met uitdaging? Dan is dit een mooie kans! Het continu ontwikkelen van nieuwe software producten en het tegelijkertijd verbeteren van de bestaande producten is wat ze bij deze Arnhemse software club dagelijks doen. Lijkt jou het gaaf om mee te denken en te ontwikkelen aan een platform waar meer dan 10.000 voertuigen per week over internet geverifieerd kunnen worden? Ben je helemaal weg van software design, web-development, schaalbaarheid en

Bekijk vacature »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little C# or JavaScript. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing PHP code. Working with the Customer Journey Specialist to make

Bekijk vacature »

Lead Microsoft Power Platform Developer @ Amsterda

2021-11-23 iSense Lead Microsoft Power Platform Developer Ben jij een ervaring MS Power Platform Developer en wil je een lead functie vervullen in een jong en multidisciplinair team? Hou je van afwisseling en wil je verschillende soorten apps bouwen voor zowel intern als klanten? Dan is dit je nieuwe baan! ISKE51390-1 Nieuw Organisatie Onze klant helpt klanten bij het inrichten en optimaliseren van hun customer journey. Ze hebben 1500 medewerkers en zijn actief over de hele wereld en hun Nederlandse vestiging is op een mooie locatie in Amsterdam. Vanuit daar bieden zij klanten uit verschillende branches een wereldwijde full service

Bekijk vacature »

Frontend Developer @ Arnhem

2021-09-21 iSense Frontend Developer Ben jij bekend met VueJS en wil je hierin graag verder ontwikkelen? Wil je aan de slag bij een organisatie die slimme web applicaties maakt die hun klanten verder helpen en samen onderzoeken wat er mogelijk is? Lees dan snel verder en solliciteer! ISVI50909 Organisatie Als Frontend Developer kom je te werken bij een organisatie die applicaties ontwikkelt voor hun klanten. De klanten zijn zeer uiteenlopend en er wordt samen gekeken naar wat wél kan; het zijn geen standaard applicaties. De projecten doen er echt toe, zo is er recent een applicatie ontwikkeld voor een klant

Bekijk vacature »

Solliciteer nu voor de rol van Customer Experience

Vindt jij het ook zo irritant als je een vraag of een probleem hebt en je wordt als een nummertje behandeld? Baal jij er ook zo van als je slecht op de hoogte wordt gehouden, wanneer je dringend ergens op zit te wachten? Snap jij het ook niet waarom je af en toe wordt afgesnauwd wanneer je een klantenservice belt? En denk jij dat je weet hoe je jouw klanten wel de beste Customer Experience kan geven? Kom dan ons team versterken!! Gateway ontwikkelt Cloud-diensten voor het afhandelen van alle denkbare Douane formaliteiten en is specialist in o.a. het verwerken

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

03/12/2021 15:07:15
 
- 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.