Linux

2250 是 CentOS/RedHat 上關閉命令的有效時間間隔嗎?

  • October 24, 2018

我需要在周日關閉站點中的所有機器。

我創建了一個腳本(在底部),它將在前一個星期五在每台機器上執行以下操作:

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

2250 是關閉命令的有效時間間隔嗎?

筆記:

  • 機器執行 CentOS/RedHat 7。
  • 我用Google搜尋,但找不到關閉命令的時間參數提到的任何上限。

這是完整的腳本:

#!/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

在關閉中,anint用於等待時間,因此在典型機器上,上限是2147483647分鐘,即4083從現在開始的幾年。

以下是來源的相關部分:

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 */
}

引用自:https://serverfault.com/questions/937056