PDA

Bekijk Volledige Versie : Cronjob loopt te lang door



Vdieduk
04/09/09, 13:59
Goedendag,

ik heb een probleem en ik hoop dat iemand me daarmee kan helpen.

Kort samengevat:

Een file genaamd 'fill_zm' maakt gebruik van een for-loop function. In de functie worden in totaal 7x3=21 variabelen opgevraagt uit andere functies. De functie zet deze variabelen automatisch in een database.

Bij Cpanel laat ik deze command elke minuut lopen. Maar ik krijg bericht dat de cronjob veel te lang duurt. In extreme gevallen nam de cronjob tussen de 70 en 100 seconden in beslag. Terwijl doorgaans deze loop 4 tot 7 seconden duurt.

Ik heb geprobeerd om het probleem op te lossen door een if-statement te plaatsen. Hiermee wil ik bereiken dat als de loop meer dan 15seconden draait , de loop '0' returend, zodat hij stopt. Alleen het probleem treedt nog steeds op..

Hieronder de code:


]<?php

date_default_timezone_set('Europe/Amsterdam');
set_time_limit(40);
$time_start_total = microtime(true);
$time_inside = microtime(true);

include('decibel_zm.php');
include('skyradio_zm.php');
include('veronica_zm.php');
include('wildfm_zm.php');
include('tmfhitradio_zm.php');
include('skylove_zm.php');
include('classicfm_zm.php');
include('../connectdb.php');
include('../find.php');

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo $time . ' ' . 'begin' . '<br><br>';





for($i = 0; $i < 1; $i++) {
$time_inside = microtime(true);


$song = wildfm_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");


$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for wildfm is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 10) {
return 0;
}

$song = veronica_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for +veronica is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 10) {
return 0;
}

$song = skyradio_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for +skyradio is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 10) {
return 0;
}

$song = decibel_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for +decibel is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 11) {
return 0;
}

$song = classicfm_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for +classicfm is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 11) {
return 0;
}

$song = skylove_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for +skylove is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 11) {
return 0;
}

$song = tmfhitradio_zm();
$title = addslashes($song[1]);
$artist = addslashes($song[0]);
mysql_query("REPLACE zometeen (radio, lyric, title, artist) values('$song[2]', 'None', '$title', '$artist')");

$time_inside_end = microtime(true);
$time = $time_inside_end - $time_inside;
echo '<strong>----- Time for one loop is: ';
echo $time_inside_end - $time_inside . '<br /><br /></strong>';
echo $time;
if ($time > 13) {
return 0;
}
}
$time_end_total = microtime(true);
echo 'Total time elapsed running this script: <strong>';
echo $time_end_total - $time_start_total . '</strong>';[/B]

Ik hoop dat iemand een idee heeft wat de oorzaak is.

Bedankt voor het lezen.

Vdieduksman

kjkoster
04/09/09, 14:37
Dag Vdieduk,

Waar blijft de tijd? In PHP of in MySQL? Heb je de slow query logger van MySQL aan staan?

Kees Jan

Mikey
04/09/09, 14:42
Weet niet wat er in de functies gebeurd maar vermoed dat je een socket opent en bepaalde content van een zender ophaald ? Je kan met php en behulp van pcntl processen forken binnen je eerste proces. Op deze manier kun je dus meerdere gegevens tegelijk op te halen.

Ben alleen bang dat dit niet geactiveerd is op je cpanel server, en een beetje reeele sysadmin zal dit ook niet activeren op een shared machine :)