Cronjob PHP-script stopt soms voortijdig (update)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior/Senior Software Developers gezocht in de Ra

Functie Op dit moment staan er posities open voor de volgende functies: Front-end, Back-End & Fullstack software developer. Als Front-End software developer werk je met JavaScript en de bijbehorende technologieën zoals TypeScript, Angular, React, Vue en Svelte. Als Back-End software developer ben je bezig in NodeJS en doe je dit met behulp van AWS, NoSQL, REST en GraphQL. Je krijgt leuke en uitdagende opdrachten met een gemiddelde duur van anderhalf jaar. Hier werk je in een team met andere IT’ers aan het ontwikkelen en verbeteren van software. Je wordt begeleid door een accountmanager die fungeert als jouw aanspreekpunt. Het team

Bekijk vacature »

Full Stack Software Developer C#.NET

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Testen en valideren van de ontwikkelde software. Actief deelnemen aan code reviews en bijdragen aan het verbeteren van de kwaliteit van de software. Je gaat aan

Bekijk vacature »

Front-end Developer

Functie omschrijving Gezocht front-end developer! Voor een toffe organisatie in de regio Rhenen zij wij op zoek naar een front-end developer die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. In deze functie heb je een adviserende rol en beschik je over een grote dosis vakinhoudelijke kennis. Samen met collega’s en klanten overleg je om aangeleverde designs om te zetten naar unieke concepten. Zo draag jij je steentje bij aan de groeiambities van de klant. Voor klanten wordt jij het vaste aanspreekpunt als het gaat over planningen hierin houdt je alle betrokkenen goed op de

Bekijk vacature »

Full Stack Developer/ Applicatie Ontwikkelaar

Wat jij doet Als Applicatie Ontwikkelaar ben je onderdeel van het team die de Rimote omgeving ontwikkeld en onderhoud. Hierbij kan je denk aan de cloud, on premise en webapplicaties welke worden gebruikt in bijvoorbeeld industriële bakkerijen, biogasinstallaties en kwekerijen. Deze applicaties verzorgen (remote) de aansturing en monitoring van processen, machines en robots. Van a tot z ben je betrokken bij projecten. Dit betekent vanaf ontwerp tot oplevering. Je moet samen met jouw team een goed product neer zetten. Dit begint met het opzetten van het ontwerp. De basis van de software moet staan als een huis. Daarvoor moet jij

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een ambitieuze werkgever in regio Tilburg waar jij volledig de mogelijkheid krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je gaat projecten gedurende het hele proces begeleiden. Je sluit aan bij afspraken met klanten om hun processen helder te krijgen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt aan nieuwe softwareoplossingen die de logistieke processen verbeteren of vernieuwen; Je houdt je bezig met het ontwikkelen van

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

.NET developer

Functie Voor jou als junior .NET ontwikkelaar staat er een flinke uitdaging klaar bij dit bedrijf waar jij veel van kan gaan leren. Zo willen zij een flinke uitbreiding doen op het webbased gedeelte dat zij nu hebben en willen zij het standaard deel gaan moderniseren. Jouw team is dan ook op zoek naar een junior .NET ontwikkelaar die het leuk vindt om op basis van research en development aan de slag te gaan. Jouw mening telt mee als het gaat om hoe en met wat deze applicaties gebouwd en herschreven gaan worden. Jouw functie bij dit bedrijf gaat dan

Bekijk vacature »

PHP Developer

Als PHP Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn. Wat doe je als PHP Developer bij Coolblue? Als PHP Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Hoewel je een PHP Developer bent, sta je open om C# of Typescript in te zetten of te leren. Ook PHP Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen pure PHP code schrijven. Samenwerken met de klantreiziger om onze klanten

Bekijk vacature »

Front-end Developer Angular

Dit ga je doen Jouw taken als Front End Developer bestaan uit: Het ontwikkelen van maatwerkoplossingen voor klanten; Het meedenken over nieuwe tools en technieken; Het begeleiden van junioren; Het meewerken aan diverse projecten; Het meedenken in UX/UI design. Hier ga je werken Als Front-End Developer ga je in een Scrum team aan de slag met de nieuwste digitale technologieën om klanten en overheden over de hele wereld te ondersteunen met het ondersteunen van hun software, veelal op het gebied van watermanagement en infra. Door middel van real-time data in combinatie met voorspellende analyses, AI, Deep Learning en Machine Learning

Bekijk vacature »

No-Code Betty Blocks ontwikkelaar

Bedrijfsomschrijving Wil jij de bedrijfsprocessen van klanten revolutionair digitaliseren en optimaliseren zonder beperkt te worden door programmeertalen? Kom werken bij een snelgroeiende en professionele organisatie met een gezonde dosis humor en veel vrijheid om jezelf te ontwikkelen. Als No-Code Betty Blocks ontwikkelaar werk je vanuit ons kantoor in het hart van Nederland, je thuiswerkplek of op locatie bij de klant. We faciliteren de juiste trainingen en ondersteuning zodat je een echte Betty Blocks expert wordt. Naast het werk zijn er bij ons bijzondere events, zoals een jaarlijkse zeildag, een zomerse barbecue en een knus kerstdiner om de grillige maanden door

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

Bekijk vacature »

In-house .NET software developer

Functie omschrijving Ben jij op zoek naar een uitdagende in-house development functie? Maak jij graag hét verschil m.b.t. interne automatisering? Haal jij energie uit het automatiseren van processen voor je eigen collega's? Dan hebben wij de perfecte vacature voor je! Voor een gezellig Brabants familiebedrijf, zijn wij op zoek naar een .NET software developer. Je gaat in deze zelfstandige functie werken aan de ontwikkeling van eigen applicaties & en het koppelen van deze applicaties aan de ingekocht software. Jouw werkzaamheden zien er als volgt uit: Het management team signaleert behoeftes vanuit de business. Vervolgens worden deze behoeftes uitgewerkt en geprioriteerd.

Bekijk vacature »

UX Writer (m/v/d)

UX Writer (m/v/d) Everything we do, starts with you. Together with you, we build the most human-centric fintech. We have the ambition to create the next. And - with Bertelsmann - a strong foundation to start from. Let’s make it new – for society and for yourself. Wij zijn op zoek naar een UX Writer (m/v/d) Fulltime - Op ons kantoor in Amsterdam of Heerenveen / deels vanuit huis Als UX Writer bij Riverty hou jij je bezig met onze strategie om daar te zijn waar onze gebruikers zijn en op de manier waarop zij ons nodig hebben, terwijl wij

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

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

27/11/2024 21:16:39
 
- 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.