Cronjob PHP-script stopt soms voortijdig (update)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C# .NET developer voor innovatieve applicaties gez

Bedrijfsomschrijving Deze werkgever houdt zich al ruim 20 jaar bezig met het ontwikkelen van innovatieve software en dat willen ze graag nog lang doorzetten. En dat merk je ook als je als .NET developer hier aan de slag gaat. De applicaties worden continu doorontwikkeld met altijd als uitgangspunt dat zowel de kwaliteit als het gebruikersgemak van hoog niveau is. Het bedrijf telt inmiddels ruim 25 medewerkers waarvan meer dan de helft op de development afdeling werken. Meer weten over deze werkgever? Mail naar [email protected] of bel 0657578548 Functieomschrijving Je komt te werken in een Scrum team met andere .NET developers

Bekijk vacature »

Fullstack developer

Functie omschrijving We are looking for a dutch native speaker Wil jij werken als Senior Developer en werken aan een applicatie die duizenden marketingcampagnes automatisch aanstuurt? Dit is je kans! Kom werken voor onze opdrachtgever en in deze rol zul je veel vrijheid en verantwoordelijkheid krijgen om gezamenlijk de applicatie naar een hoger plan te tillen. Wat ga je verder doen: Optimaliseren, beheren en uitbreiden van onze applicatie; Het bouwen van aansluitingen op de systemen van partners middels API’s; Meedenken over de technische/ontwikkel-standaarden; Proactief verbeterpunten voorstellen. Bedrijfsprofiel Het is een organisatie die met een team van verschillende developers én marketeers

Bekijk vacature »

Junior Front end developer

Functie Als Front end developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

Python Developer

Dit ga je doen Als Python Developer ben je verantwoordelijk voor: Het ontwikkelen van Stuurprogramma's in Python zodat er verbindingen kunnen worden gelegd tussen besturingssystemen en (AV) hardware; Het testen en debuggen van Stuurprorgamma's; Het communiceren met noodzakelijke partijen in gevallen waar extra technische details nodig zijn om een Stuurprogramma te ontwikkelen of problemen op te lossen; Het maken van de nodige technische documentatie (in het Engels); Het participeren in een Scrum/Agile omgeving. Hier ga je werken Deze internationale organisatie is wereldwijd een succesvol producent en leverancier van professionele AV hard- en software. Klanten gebruiken de producten o.a. voor het

Bekijk vacature »

Full stack developer

Functie Binnen een ontzettend stimulerende werkomgeving kom jij te werken in een software team van 14 developers. Met ontzettend stimulerend bedoel ik een modern pand, wat voorzien is van alle nodige soft- en hardware, zodat jij jouw werk goed kan uitvoeren. Daarnaast zitten ze in een bos, waardoor je in een groene omgeving rustig kunt werken. Het team bestaat uit front end, back end en full stack developers. Jij krijgt dus de keuze hier waar jij jezelf het liefst op zou richten, maar de voorkeur gaat uit naar back end. Er wordt hier Scrum (agile) gewerkt in multidisciplinaire teams met

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/senior Front-end developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Low-code developer

Functie omschrijving Heb jij altijd al een training willen volgen in het buitenland? Voor een leuke opdrachtgever in omgeving Alphen ad Rijn zijn wij op zoek naar kandidaten die aan de slag willen als Low Code Developer! Beschik jij over HBO/WO nivo, bij voorkeur Informatica, maar een ander technische opleiding zoals bijv. wiskunde, natuurkunde is ook goed. Heb jij aantoonbare affiniteit met IT en ben jij gedreven, enthousiast, communicatief vaardig en klantgericht? Lees dan snel verder! Je wordt getraind tot een volwaardig Low Code Developer, het traject ziet er als volgt uit: Start 1e week januari, opleiding van 3 weken

Bekijk vacature »

PHP ontwikkelaar

Functie Jij komt te werken in een development team van 9 man. Het grootste deel doet back end development en daarnaast is er 1 teamlead en 1 tester in het team. Dit Agile team is van groots belang voor de organisatie omdat zij voornamelijk alle eigen systemen in-house ontwikkelen. Naast het door ontwikkelen van het bestaande platform en de software die daarbij komt kijken, zul jij je ook bezighouden met het realiseren en opzetten van nieuwe projecten binnen het bedrijf. Je staat nauw met de klant in contact om zo hun wensen zo goed mogelijk te kunnen realiseren. Daarnaast ontwikkel

Bekijk vacature »

Back-End Web Developer

As a Back-End Web Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a Back-End Web Developer at Coolblue? As a Back-End Web 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 also feel confident with setting up microservices in Typescript or are open to learning this. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing pure

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 »

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 »

Back-end developer

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een gemotiveerde SQL Developer/ functioneel consultant. Jij wordt verantwoordelijk voor zowel het ontwerpen en implementeren van SQL-databases als voor het in kaart brengen van de bedrijfsprocessen van een organisatie en het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt als volgt uit te zien: Ontwerp en implementatie van SQL-databases: Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Analyse van bedrijfsprocessen: Je analyseert de bedrijfsprocessen van de organisatie om de behoeften van de klant te begrijpen en te vertalen naar

Bekijk vacature »

Front-end Developer

Dit ga je doen Doorontwikkelen van software; Ontwikkelen en testen van nieuwe functionaliteiten; Implementaties van nieuwe functionaliteiten en updates; Verzorgen van technische migraties naar nieuwe frameworks; Verwerken van incidenten. Hier ga je werken Onze klant, gevestigd in de regio Amsterdam, draagt bij aan het verbeteren van de veiligheid en efficiëntie van de Nederlandse infrastructuur door het ontwikkelen van afgemeten software oplossingen. Zo passen zij location intelligence toe om onderhoud en reparaties efficiënt te laten verlopen. Verder zorgen deze systemen dat incidenten zo snel mogelijk worden opgelost. Als Front-end Developer ben jij samen met je team betrokken met het (door)ontwikkelen van

Bekijk vacature »

Front end developer

Functie Jij als front end developer gaat werken binnen de teams van onze klant, uiteraard met alle moderne technieken. Opdrachten worden echt gericht op jouw leerdoelen en jouw behoeftes. Wij hebben een omgeving gecreëerd waarin je echt jezelf kan zijn en waar echt gekeken wordt naar jouw voorkeuren. Maak je een fout? Geen probleem, leer ervan en dan ga weer door. Door de variëteit aan werk kun je in verschillende omgevingen een kijkje nemen en dus jezelf snel ontwikkelen. Eisen Je bent communicatief vaardig en houdt van een dynamische omgeving Je hebt HBO werk- en denkniveau Je hebt gedegen kennis

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/04/2024 04:56:33
 
- 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.