我需要在周日关闭站点内的所有机器。
我创建了一个脚本(见底部),该脚本将在前一个周五在每台机器上执行以下操作:
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
答案1
在关闭来源,int
用于等待时间,因此在典型的机器上,上限是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 */
}