Por que o 'uptime -s' não é constante?

0

Eu tenho 6 Raspberry Pi 3. Um script Bash funciona em 5 deles, não em 1.

Eu uso uptime -s > file1 [ou -p , tentei os dois] e depois eu cp file1 file2 no final do meu script.

Na próxima vez que eu executar o script após 10 min, eu faço o uptime -s > file1 e comparo usando o último file2 .

Eu comparo file1 e file2 com:

if [[ "$(cat file1)" != "$(cat file2)" ]]; then …

Eu corro isso a cada 10 min. Toda vez que vejo os valores de file1 e file2 diferirem por 1 segundo, o teste de comparação de sequência falhará.

O que no mundo está acontecendo com esse um Pi? - os outros 5 funcionam bem.

Existe uma maneira melhor de fazer isso?

    
por user322035 06.09.2017 / 01:08

1 resposta

0

Ponha de lado se o seu caminho é uma boa maneira de fazer o que você quer alcançar. Uma possível explicação:

strace uptime -s mostra que leu /proc/uptime , eu verifiquei no Debian e no Raspbian. Parece que também lê o tempo atual (não posso dizer com certeza, é um palpite razoável) e subtrai para dizer em que momento no passado o sistema foi iniciado.

Esses dois eventos de leitura são separados por algum intervalo. Não há garantia de que o intervalo será exatamente o mesmo toda vez que você executar o comando. Então, o resultado da subtração irá "flutuar" um pouco.

Em seguida, esse valor é arredondado de alguma forma porque a saída final precisa fornecer um número inteiro de segundos. Não importa se o arredondamento é "baixo" ou "para cima", ou "meio cheio" etc. O que importa é: há uma certa parte fracionária em que o resultado do arredondamento "salta" instantaneamente de N para N+1 . Se o resultado da subtração "flutuar" próximo a esse valor crítico, você obterá N às vezes, N+1 algumas outras vezes.

Por acaso, uma das suas Framboesas foi iniciada em tal segundo em que o uptime se comporta assim, os outros não tiveram essa "sorte". Qualquer deles pode ou não ter "sorte" depois que você o reinicia.

Acho que se você estressasse seus sistemas e conseguisse reduzir a uptime a execução o suficiente, obteria resultados diferentes mesmo nesses outros cinco Framboesas.

Have not figured out any better way to detect power loss/reboot. (...) There must be a better way to do this. No RTC in this thing.

Trabalhe com /etc/rc.local talvez. Ele foi projetado para executar as coisas uma vez quando o sistema for iniciado.

    
por 06.09.2017 / 15:03