Visualizzazione risultati 1 fino 23 di 23

Discussione: Cron Job: tipo di risposta 500

  1. #1
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Question Cron Job: tipo di risposta 500

    Ho creato ieri un Cron Job giornaliero da esseguire alle 15, ed oggi essendo la prima volta che viene eseguito ho voluto controllare che tutto funzionasse, però ho riscontrato due anomalie:

    1) Il Cron Job è stato eseguito alle 15:09:06, quindi con quasi 10 minuti di ritardo (ma poco importa)

    2) Controllando nella finestra dei Job eseguiti, il tipo di risposta è 500, quindi dovrebbe esserci qualche errore, anche se però sembra che la pagina richiamata abbia fatto il suo lavoro correttamente.



    Attualmente sto usando PHP 5.4
    Ultima modifica di faidateitalia : 11-07-2015 alle ore 15.31.36

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Il messaggio di errore è relativo ad un timeout di rete, cosa fa esattamente lo script in questione?

  3. #3
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    legge il file xml dei feed rss di youtube di alcuni canali e posta l'ultimo video caricato sul forum

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    E quante richieste effettui in tutto? È possibile che le ultime non siano state effettuate. Magari modifica un poco lo script scrivendo di volta in volta le richieste immediatamente prima di effettuarle e subito dopo completate, in modo da poter verificare cosa effettivamente causa il timeout.

  5. #5
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    E quante richieste effettui in tutto? È possibile che le ultime non siano state effettuate. Magari modifica un poco lo script scrivendo di volta in volta le richieste immediatamente prima di effettuarle e subito dopo completate, in modo da poter verificare cosa effettivamente causa il timeout.
    Sono 16 canali per ora.

    Prima per ogni canale facevo 3 richieste alle api di youtube per arrivare ad ottenere l'ultimo video caricato: ottengo l'id del canale -> ottengo l'id della cartella di upload -> ottengo i dati dell'ultimo video caricato.

    Ora invece usando i file xml faccio solo due richieste: ottengo l'id del canale -> leggo i dati del canale dal file xml (prendendo solo l'ultimo video caricato)

    In questo modo sono riuscito a dimezzare a anche i tempi di esecuzione dello script, passando da 22-25 secondi a 10-13 secondi.

    Comunque prima le richieste sembrava che me le avesse fatte tutte correttamente, perchè anche il video dell'ultimo canale da elaborare era stato postato.

  6. #6
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Stessa cosa oggi, anche se lo script ha funzionato correttamente..


  7. #7
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Quindi? Cosa faccio?

  8. #8
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Anche oggi stessi problemi... Job eseguito con 9 minuti di ritardo e tipo di risposta 500...

  9. #9
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Magari modifica un poco lo script scrivendo di volta in volta le richieste immediatamente prima di effettuarle e subito dopo completate, in modo da poter verificare cosa effettivamente causa il timeout.
    La funzione che esegue tutte le richieste è la seguente:

    Codice:
    function file_get_contents_curl($url) {
        $ch = curl_init();
    
        curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);     
    
        $data = curl_exec($ch);
    
        if(curl_errno($ch))
        	echo 'Request error: ' . curl_error($ch);
    
        curl_close($ch);
    
        return $data;
    }
    Se ci fosse qualche problema riguardo il timeout dovrebbe stamparmi l'errore, ma quando eseguo lo script non stampa nulla.

  10. #10
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Stesso fatto anche oggi..

    PS Continuo a postare sperando che prima o poi qualcuno si degnerà di una risposta!

  11. #11
    filsil non è connesso AlterVista Staff
    Data registrazione
    05-01-2010
    Messaggi
    2,024

    Predefinito

    Hai provato ad eseguire lo script richiamandolo direttemente e vedere cosa succede? Magari facendo un po' di debug in questo modo riesci a risolvere.
    Il problema sembra comunque dovuto ad un timeout su una connessione server to server, dovresti verficare che le url a cui si collega siano tutte corrette e rispondano in tempi ragionevoli.

  12. #12
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da filsil Visualizza messaggio
    Hai provato ad eseguire lo script richiamandolo direttemente e vedere cosa succede? Magari facendo un po' di debug in questo modo riesci a risolvere.
    Il problema sembra comunque dovuto ad un timeout su una connessione server to server, dovresti verficare che le url a cui si collega siano tutte corrette e rispondano in tempi ragionevoli.
    Naturalmente prima di mettere lo script nel cron job l'ho testato manualmente.

    Nelle richieste curl è già impostato il timeout massimo: curl_setopt($ch, CURLOPT_TIMEOUT, 5); oltre al fatto che si tratta di solo due richieste ai server di google. Inoltre le richieste per ora hanno sempre fornito risultati esatti.

  13. #13
    filsil non è connesso AlterVista Staff
    Data registrazione
    05-01-2010
    Messaggi
    2,024

    Predefinito

    Forse queste due richieste impiegano troppo tempo ad essere elaborate e la connessione viene chiusa, non riesci ad effettuare più richieste più semplici e unire i risultati nello script php?

  14. #14
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da filsil Visualizza messaggio
    Forse queste due richieste impiegano troppo tempo ad essere elaborate e la connessione viene chiusa, non riesci ad effettuare più richieste più semplici e unire i risultati nello script php?
    Ma la connessione non viene chiusa, perchè le richieste restituiscono i risultati interi, altrimenti li restituirebbero parziali.
    Posto le funzioni che ho implementato, non capisco cosa possa esserci di errato.

    Il codice che elabora la richiesta per ottenere l'id di un canale YouTube dato il suo nome:
    Codice:
    function getChannelID($channel)
    {
    	$getChannelID = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=".urlencode($channel)."&type=channel&key=".APIKEY;
    	$getChannelID = file_get_contents_curl($getChannelID);
    	$channelID = json_decode($getChannelID, true);
    
    	return $channelID['items'][0]['id']['channelId'];
    }
    Il codice che elabora la richiesta per leggere tutte le informazioni del canale
    Codice:
    function getLastUploadedVideoXML($name)
    {
    	$stringXML = file_get_contents_curl('https://www.youtube.com/feeds/videos.xml?channel_id='.getChannelID($name))
    	$xml = new SimpleXMLElement($stringXML);
    
      	$yt = $xml->entry[0]->children('http://www.youtube.com/xml/schemas/2015');
      	$media = $xml->entry[0]->children('http://search.yahoo.com/mrss/');
    
    	$video = array( 
    					"title" => $xml->entry[0]->title,
    					"description" => $media->group->description,
    					"thumb" => $media->group->thumbnail->attributes()["url"],/*"https://i.ytimg.com/vi/".$yt->videoId."/sddefault.jpg"*/
    					"id" => $yt->videoId,
    				);
    
    	return $video;
    }

    E per finire questa è la funzione che esegue le richieste:
    Codice:
    function file_get_contents_curl($url) {
        $ch = curl_init();
    
        curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);     
    
        $data = curl_exec($ch);
    
        if(curl_errno($ch))
        	echo 'Request error: ' . curl_error($ch);
    
        curl_close($ch);
    
        return $data;
    }

  15. #15
    filsil non è connesso AlterVista Staff
    Data registrazione
    05-01-2010
    Messaggi
    2,024

    Predefinito

    Se ricevi correttamente i dati da youtube il problema probabilmente è qualche altra richiesta successiva. Quali altre operazioni vengono eseguite?

  16. #16
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    La funzione file_get_contets_curl($url) che è quella che esegue le richieste viene richiamata solo in quelle due funzioni sopra. Dopo non faccio nessun'altra richiesta.

    Le altre operazioni sono lettura e inserimento da database, e postare sulla pagina facebook. Il tutto viene svolto correttamente, senza errori!

  17. #17
    filsil non è connesso AlterVista Staff
    Data registrazione
    05-01-2010
    Messaggi
    2,024

    Predefinito

    Il postare sulla pagina Facebook effettua a sua volta una richiesta server to server, potrebbe essere quella ad andare in timeout.
    Comunque se lo script genera un errore 500 deve bloccarsi ad un certo punto per un errore, non è possibile che continui ad essere eseguito.

  18. #18
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da filsil Visualizza messaggio
    Il postare sulla pagina Facebook effettua a sua volta una richiesta server to server, potrebbe essere quella ad andare in timeout.
    Comunque se lo script genera un errore 500 deve bloccarsi ad un certo punto per un errore, non è possibile che continui ad essere eseguito.
    Questa è la funzione che posta sulla pagina facebook. E comunque posta correttamente anche li, nessun errore!

    Codice:
    function postOnFacebook($video, $url, $channName)
    {
    
    	$APP_ID = 'XXXXXXXXXXXXXXXXX';
    	$APP_SECRET = 'XXXXXXXXXXXXXXXXX'; 
    	$PAGE_TOKEN = "XXXXXXXXXXXXXXXXX";
    	$PAGE_ID = "XXXXXXXXXXXXXXXXX"; 
    
    	FacebookSession::setDefaultApplication($APP_ID, $APP_SECRET);
    
    	$params = array(
    	  "link" => $url,
    	  "picture" => "image.jpg",
    	  "name" => "Titolo",
    	  "description" => "Descrizione",
    	);
    
    	$page_session = new FacebookSession($PAGE_TOKEN);
    
    	if($page_session)
    	{
    	 try {
    		$response = (new FacebookRequest(
    			$page_session, 'POST', '/'.$PAGE_ID.'/feed', $params
    			)
    		)->execute()->getGraphObject();
    
    		} catch(FacebookRequestException $e) {
    			echo "PAGE Exception occured, code: " . $e->getCode();
    			echo " with message: " . $e->getMessage()."<br>";
    		}
    	}
    }

  19. #19
    filsil non è connesso AlterVista Staff
    Data registrazione
    05-01-2010
    Messaggi
    2,024

    Predefinito

    Ciao,
    svelato il mistero: in pratica lo script che richiama il tuo cron ha un timeout molto basso per evitare che una serie di job molto lunghi possano rallentare il sistema. Di fatto il php richiamato continua ad essere eseguito fino a quando non termina o esaurisce il max execution time ed è per questo che anche con quell'errore nel log tutto funzionava correttamente.
    Puoi ignorare questo messaggio di errore, appena possibile lo modificheremo con uno più chiaro che spieghi effettivamente cosa è successo.

  20. #20
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da filsil Visualizza messaggio
    Ciao,
    svelato il mistero: in pratica lo script che richiama il tuo cron ha un timeout molto basso per evitare che una serie di job molto lunghi possano rallentare il sistema. Di fatto il php richiamato continua ad essere eseguito fino a quando non termina o esaurisce il max execution time ed è per questo che anche con quell'errore nel log tutto funzionava correttamente.
    Puoi ignorare questo messaggio di errore, appena possibile lo modificheremo con uno più chiaro che spieghi effettivamente cosa è successo.
    Non mi è molto chiara la cosa... Quindi è un problema che dipende da voi?

  21. #21
    filsil non è connesso AlterVista Staff
    Data registrazione
    05-01-2010
    Messaggi
    2,024

    Predefinito

    In pratica se il tuo script ci mette più di 5 secondi a rispondere vedi sempre quell'errore, anche se poi lo script riesce ad eseguire tutte le operazioni correttamente.

  22. #22
    faidateitalia non è connesso Utente giovane
    Data registrazione
    05-05-2015
    Messaggi
    30

    Predefinito

    Si ora viene completato in 10-15 secondi.. Quindi è normale quell'errore?

  23. #23
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da faidateitalia Visualizza messaggio
    Si ora viene completato in 10-15 secondi.. Quindi è normale quell'errore?
    È un messaggio di errore (che verrà sistemato) legato alla sola visualizzazione dell'esito del cron job sul pannello di controllo, nel caso in cui lo script non termini entro cinque secondi.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •