É 2250 um intervalo de tempo válido para o comando shutdown no CentOS / RedHat?

1

Preciso desligar toda a máquina em um site - no domingo.
Eu criei um script (na parte inferior) que executará o seguinte em cada máquina, na sexta-feira anterior:

command="hostname ; sudo shutdown -h 2250"
ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=1 -t privuser@${host} $command

O intervalo de tempo 2250 é válido para o comando de desligamento?

Notas:

  • Máquinas executam o CentOS / RedHat 7.
  • Eu pesquisei no Google, mas não consegui encontrar nenhum limite superior mencionado no parâmetro time do comando de desligamento.

Este é o script completo:

#!/usr/bin/env bash

# WHEN: Sunday, October 28, 2018 from 8:00 a.m.
# to calculate minutes: ( (24 - now_hour)*60 + 1440 + 300 )
# if run on 15:30 Friday: (24 - 15.5) * 60 + 1440 + 300 = 2250 

ignored=(168 12 15 38 42 46 99 180)
command="hostname ; sudo shutdown -h 2250"

for tuple in {10..204} ;
do
    host="192.168.1.${tuple}"
    if [[ $(printf "_[%s]_" "${ignored[@]}") =~ .*_\[$tuple\]_.* ]]; then
        echo ">>> will skip $host"
        continue
    fi
    echo ">>> try '$command' on $host"
    ping -c1 $host
    ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=1 -t privuser@${host} $command
done
    
por boardrider 24.10.2018 / 23:05

1 resposta

2

Na origem do encerramento, é utilizado um int para o tempo de espera, portanto, em uma máquina típica, o limite superior é 2147483647 minutos, ou seja, 4083 anos a partir de agora.

Aqui estão as partes relevantes da fonte:

int main(int argc, char **argv)
{
        ...
        int                     c, i, wt;
        ...
        if (strchr(when, ':') == NULL) {
                /* Time in minutes. */
                wt = atoi(when);
                if (wt == 0 && when[0] != '0') usage();
        } else {
                ...
        }
        ...
        /* Give warnings on regular intervals and finally shutdown. */
        if (wt < 15 && !needwarning(wt)) warn(wt);
        while(wt) {
                if (wt <= 5 && !didnolog) {
                        donologin(wt);
                        didnolog++;
                }
                if (needwarning(wt)) warn(wt);
                hardsleep(60);
                wt--;
        }
        shutdown(halttype);

        return 0; /* Never happens */
}
    
por 24.10.2018 / 23:59