Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Procedure perl lanciate dal browser sul webserver rimangono a girare all'infinito

    Ciao,

    sono un niubbo
    volevo sapere come mai le procedure perl che io sto sviluppando
    e che vengono lanciate dal mio firefox
    se io clicco stop su firefox
    le procedure perl
    rimangono ancora a girare nel webserver e non vengono killate sul server.

    Che cosa usualmente puo' fare uno sviluppatore di pagine web
    per impedire che gli script perl sul server
    quando l'utente stoppa il browser
    gli script continuino a girare all'infinito ?????

    Help me

    Che cosa si fa ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Sarebbe molto grave, se un utente dal suo browser potesse interferire con programmi che girano sul server ...
    L'utente dal browser puo` lanciare un programma, che deve ritornare una pagina Web al client.
    Pero` il programma sul server deve poter decidere autonomamente cosa fare. Al limite se il browser non esiste piu` (o non accetta piu` dati), il server terminera` la sua esecuzione ed i dati (la risposta al browser) andranno perduti.

    Immagino che il tuo scopo sia testare alcune applicazioni lato server, che stai sviluppando.
    Di solito le procedure Perl chiamate dal Web producono dei dati da inviare al client. Ma non devono durare all'infinito: pochi secondi e il programma deve essere terminato, altrimenti significa che c'e` un errore da qualche parte.
    Dovrebbe essere possibile inserire dei timeout sul server, in modo che se un processo dura piu` di un tot, venga killato in modo automatico.
    Oppure puoi modificare il modo di chiamare la procedura (e raccogliere i dati) e lanciarla da server, con il che` puoi anche killarla con un control-C (o simile).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Per la sicurezza non ci sono problemi.

    Immaginavo che non fosse colpa mia ma dei gestori del webserver

    Molto semplicemente dato che approfondiro' il Perl piu' in la'

    1)
    mi basta, per adesso, solo un'indicazione su quale funzione perl possa usare
    affinche' il mio script si suicidi da solo passato un certo tempo. TUTTO QUI.
    Una specie di bomba a orologeria che kill il processo perl in linux. sul server dopo un certo tempo

    Non so come fa lo script perl sul server a sapere se il client e li
    ancora vivo o e' stato matato.
    2)
    Una brevissima indicazione su quali funzioni perl possa utilizzare
    per questo
    sarebbe una informazione PREZIOSA per me
    Spero di non aver detto ca...te.

    Praticamente da un menu' su pagina web lancio uno script perl che raccoglie dati
    di un utente
    poi con un form get lancio un'altro script perl che legge i dati in archivio
    e li visualizza su una pagina web.
    Mi servirebbe un self-destruction a tempo affinche' l'ultimo script
    per qualsiasi motivo
    non giri sul server a vuoto in eterno

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ad alcune domande non so rispondere.
    Il Perl lo ho usato qualche anno fa, per costruire dei CGI; poi lo ho usato anche per altri scopi (non CGI). Ma non mi sono mai trovato a far partire un processo che non esce.

    Un programma Perl-CGI, deve finire con la "stampa" di una pagina HTML. Poi non deve piu` esistere il programma. Se gira all'infinito e` un errore di programmazione.
    Ci possono essere eccezioni a questa logica, tipo quando si tengono in conto variabili di sessione, ma comunque il programma deve morire, lasciando in vita solo le variabili (che verranno cancellate ad un timeout). In questo il PHP e` un gestore migliore (perche` fatto appositamente per gestire queste cose).

    lo script non puo` saspere che il client e` ancora in attesa. Ma dato che risponde nel giro di pochi millisecondi (che possno diventare alcuni secondi in caso di rallentamenti del server e/o della linea) deve presumere che il client sia sempre in attesa.
    Se stai pensando ad opzioni tipo "push", non sono possibili (che io sappia).

    Nella tua descrizione, ci sono alcune coes non chiare (per me).
    Praticamente da un menu' su pagina web lancio uno script perl che raccoglie dati di un utente
    poi con un form get lancio un'altro script perl che legge i dati in archivio e li visualizza su una pagina web.
    Perche` sono due script?
    Io avrei scritto una cosa diversa:
    Da una pagina Web con un form, chiamo un programma Perl che elabora i dati del form e cerca dei dati in un archivio. Quindi prepara la pagina dei risultati e la manda al client.
    Poi il programma Perl deve finire. Se necessario puo` salvare dei dati in un database (lo stesso da cui legge oppure un altro).

    Mi servirebbe un self-destruction a tempo affinche' l'ultimo script
    per qualsiasi motivo non giri sul server a vuoto in eterno
    Puoi realizzare una cosa del genere, ma non credo sia standard o utile. Se il programma si chiude, non ce n'e` bisogno.

    Comunque per fare quello che chiedi doversti:
    1. all'inizio del programma leggere il timer del server e il numero di processo del programma che sta girando
    2. impostare un tempo massimo e sommarlo al timer
    3. far partire un crontab con scadenza quel tempo, che fa il kill del programma di cui sopra
    (kill NUMERO_PROCESSO)
    per 1. e 2. vedi le funzioni timer del Perl (e correlate)
    per 3. vedi il crontab di linux (se sei sotto linux - qualcosa di analogo se sei sotto win)
    per far patire un programma su sistema operativo vedi system o exec o `` (apice sinistro) del Perl
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    In effeti mi e' successo di fare stop una dozzina di volte col browser
    perche' mi piace programmare veloce e quindi modificavo lo script
    mentre girava la procedura perl col comando
    `find '$direttorio' -name '*.*.desc' -print | xargs grep -i -n '$file' > $tmp `;
    e poi mi sono trovato 15 processi con proprieta' del webserver
    che si mangiucchiavano cpu all'infinito.

    Mi sono umiliato
    a chiamare il gestore del sistema pregandolo di killare
    a mano i processi cosa che io non potevo fare dato che sono un utente senza privilegi.
    Comunque Il tuo suggerimento sul crontab mi e' davvero molto utile
    per evitare altre figuracce.

    Io avevo pensato a uno sleep(600); kill (-15, su num processo padre);


    Quello che mi scoccia e' la lentezza del comando soprascritto quando lo lancio da browser
    ci sta a volte 10 minuti mentre se lo lancio a mano da so ci sta meno di 1 minuto.
    Suggerimenti su come velocizzare il comando unix ?

    Tutta questa lentezza nel raccoglire i dati
    e' un bel guaio, per un buon sviluppatore di pagine web.
    BA pazienza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.