Visualizzazione dei risultati da 1 a 5 su 5

Discussione: sincronizzare time

  1. #1

    sincronizzare time

    Salve,

    data l'assenza di cron sul mio sistema (server web con unix) devo scrivere un processo che, una volta lanciato da terminale si stacchi da esso e viva di vita propria finchè non verrà killato, ne imiti la sua funzionalità.

    Ovvero eseguire delle funzioni ad una certa ora di un certo giorno.

    Il tutto naturalmente inizia da:
    codice:
    use Proc::Daemon;
    use Proc::PID::File;
    Proc::Daemon::Init;
    exit if ( Proc::PID::File->running( dir => "/tmp") );
    
    while(1)
    {
    	sleep 5;
    }
    dato che il mio server risiede in usa il time è sballato, in più problemi con ora legale etc, vorrei agganciarmi ad un server ntp italiano, per avere ora e data perfetti...sincronizzandosi con esso ogni 5 secs.

    per fare questo userei: Net::NTP;

    La prima domanda è: un server ntp, ad esempio 'time.ien.it' accetta varie chiamate molto frequenti da uno stesso IP?

    Altrimenti ci sarebbe un modo per sincronizzare il time interno di per ad un dato valore?

  2. #2
    Penso di aver risolto facendo così:

    codice:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use lib 'lib';
    use Net::NTP;
    use Data::Dumper;
    
    my $time = &_get_ntp_time();
    my $k = 0;
    
    while (1)
    {
        sleep 5;
        $k = $k + 5;
        
        my @time = localtime $time + $k;
        
        print sprintf('%04d/%02d/%02d %02d:%02d:%02d',1900+$time[5], ++$time[4],@time[3, 2, 1, 0]), " - $k \n";
    
        $time = &_get_ntp_time() and $k = 0 if $k > (60 * 2);
    }
    
    sub _get_ntp_time
    {
        my %ntp_data = get_ntp_response('time.ien.it');
        return $ntp_data{'Reference Timestamp'};
    }
    In pratica mi collego al server NTP ogni 2 minuti per ri-sincronizzare ... dato che tutto quello che viene eseguito internamente al ciclo potrebbe più la sleep potrebbe portare ad un falso time...

  3. #3
    Avrei bisogno di un aiuto per capire come struttura una condizione IF secondo questi parametri:

    dalle ore 10:00 alle ore 12:30, dal Lunedi al Venerdi

    Avendo come riferimento:

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isd st) = localtime(time);

    Quindi dovre fare una cose del genere:

    if ( ora => 10:00 and ora <= 12:30 and dayw = (l,m,m,g,v) )
    {
    # ...Do the Job
    }

    qualche suggerimento?

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    usa i minuti:

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isd st) = localtime(time);
    my $totmin=($hour*60)+$min;

    if ($totmin>=600 && $totmin<=750 && $wday>=1 && $wday<=5)
    {print "ok lavoro!\n"}

  5. #5
    ...astuto!

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.