Tentando definir a data em uma máquina baseada em Linux a partir de outra máquina

5

Estou executando uma caixa ocupada em uma plataforma incorporada. Eu gostaria de definir a data na caixa corretamente cada vez que eu reiniciar o hardware. Eu não tenho como salvar o tempo persistentemente, por isso estou reduzido a definir o tempo de cada vez. Eu tenho conectividade de rede local, mas não tenho SSH. Meu hack atual para isso é redirecionar a saída de 'date' para um arquivo no meu PC, acessar esse arquivo da minha plataforma de hardware através do tftp e, em seguida, analisar o arquivo, usar seu conteúdo e definir a data. Eu não tenho idéia de como obter a string do arquivo e, em seguida, defini-lo usando o comando 'date'. Qualquer ajuda seria apreciada. Qualquer outra maneira de definir a data seria get. Eu tentei usar o ntpd, mas isso falha devido à falta de conectividade com a Internet

    
por jogabonito 25.10.2011 / 14:13

6 respostas

4

Usando um cron job, você pode gravar um arquivo no diretório / tftp com uma granularidade de 1 minuto.

* * * * * date "+%m%d%H%M%Y.%S" > /tftp/currdate.txt 2>/dev/null

O conteúdo desse arquivo é um valor único, formatado convenientemente no mesmo formato que o comando de data precisa para definir a data / hora.

bash$ cat currdate.txt
102600052011.00

No lado do busybox, você poderia apenas tftpget o arquivo, e processá-lo

cat currdate.txt | while read date; do
    date $date
done

Se o HTTP for uma opção, você pode configurar um script php que apenas retornou a data quando chamado, e fazer com que seu script no lado do busybox pesquise essa URL e processe o resultado. A granularidade da data seria mais próxima, nesse caso.

Com o TFTP, você estará dentro de 1 minuto. Espero que seja perto o suficiente.

    
por 26.10.2011 / 06:08
7

NTP (Network Time Protocol) é o modo padrão de obter a data. Em um sistema BusyBox, você pode querer usar o ntpclient .

Você precisará de um servidor NTP em algum lugar da rede.

    
por 25.10.2011 / 14:28
4

Para usar o Network Time Protocol na máquina embarcada, apenas execute um pouco daemon NTP (servidor) localmente em sua LAN - por exemplo, na máquina que você está tentando usar para sincronização. A maioria, senão todas as distribuições, tem pacotes como openntpd ou ntp que fornecem um servidor NTP.

Se você ainda insistir em analisar a saída de date , a melhor maneira é usar o formato genérico +%s (segundos desde 1970) para saída e entrada. Para fazer isso, no lado da data source use date +%s para obter a string de data e na máquina do busybox, execute date -s "@$VALUE" , em que $VALUE deve ser substituído pelo valor recebido da origem . Observe que essa abordagem deve acabar em resultados distorcidos devido a tempos de execução de comunicação e comando (que são minimizados quando você faz uso do NTP).

    
por 25.10.2011 / 15:45
2

Você também pode usar:

# ntpd -q -p ntp-server-ip-address

ntpd atualizará o horário e sairá depois. Você pode fazer com que seu firmware execute isso em cada inicialização, por exemplo.

    
por 03.07.2012 / 17:35
1

De acordo com seu comentário.

Thanks for the answers. rdate is not available on my platform. Also I cant use ntp, since I cant access internet on the board. I am more interested in a way to be able to parse the output of date from another machine and set that here at the moment

A solução para o seu problema é configurar outra máquina em sua LAN como um servidor de tempo - essa máquina deve (preferencialmente mas não estritamente necessariamente) ter acesso à internet, para que ela mesma possa sincronizar com uma fonte de tempo externa. o servidor NTP pode ser configurado para transmitir o relógio na LAN (1 pacote UDP a cada 5 minutos ou mais), ou pode ser apenas um servidor que é acessado mediante solicitação - a sua escolha.

A sua caixa ocupada que tem acesso à LAN (mas não à Internet) pode ser instalada com um cliente NTP que capte a hora da transmissão OU apenas pergunta seu servidor de rede local durante o tempo necessário.

    
por 26.10.2011 / 06:53
-1

Outra opção:

date 'ssh username@host date "+%m%d%H%M%H.%S"'

Lembre-se de colocar seu conteúdo ~ / .ssh / id_rsa.pub no arquivo .ssh / authorized_keys do usuário @ host.

    
por 29.09.2014 / 21:42

Tags