Como calcular o valor máximo para desligamento -r + $ {MINUTES}?

1

Estou usando o CentOS 7.5.1804 com o GNU bash versão 4.2.46 (2) -release (x86_64-redhat-linux-gnu).

Para reinicializações agendadas dentro de janelas de manutenção, eu calculo os minutos a partir de agora até a próxima reinicialização. No exemplo, para uma reinicialização em ~ 3 meses eu usaria

shutdown -r +129600

Já que estou interessado em entender melhor o bash, estou curioso sobre qual poderia ser o valor mais alto e como calculá-lo?

Um desligamento agendado com int32 informaria

shutdown -r +4294967295
Shutdown scheduled for Tue 10184-07-27 ... 

valores maiores ainda são possíveis, mas como calcular o máximo possível?

    
por U880D 12.06.2018 / 16:02

1 resposta

1

Na minha máquina, o / sbin / shutdown é um link simbólico para / sbin / systemctl.
Pesquisando na fonte systemctl ( link ), eu vejo

  • o % co_de A função% analisa a especificação de tempo em uma variável chamada shutdown_parse_argv , que é do tipo arg_when
  • o % co_de A função% cria uma usec_t struct com esse valor usec_t
  • o send_shutdownd struct contém:

    /* Microseconds after the epoch 1970 UTC */
    uint64_t usec;
    

Então, parece que o tempo máximo é:

$ \bc <<< '(2^63-1) / 10^6 / 60' # minutes
153722867280
$ \bc <<< '(2^63-1) / 10^6 / 60 / 24 / 365' # years
17548272

Então, novamente, eu não li o sd_shutdown_command função para ver como o argumento é realmente analisado em um valor de tempo.

    
por 12.06.2018 / 16:40