从 bash 脚本自动关闭 Windows 10 计算机

问题描述

我的电源故障监控方案/Windows 10 计算机的自动关机有问题。 在我的网络上,我有一个 Linux 机器,它有一个通过 USB 连接的 UPS 单元,并使用软件进行维护,该软件可以在发生电源故障时关闭计算机。 在另一台同样由运行无头 Windows 10 服务器的 UPS 单元供电的计算机上,我设置了一个从 Task Scheduler 运行的简单 bash 脚本 (cygwin)。 一旦上述 Linux 机器停止响应网络上的 ping,它应该关闭这台计算机(因为它在检测到电源故障时关闭)。 UPS 单元设置为在断电 10 分钟后关闭电源,为 Windows 机器提供充足的时间来检测 Linux 机器没有响应并执行关闭。 下面是监控脚本代码

#!/bin/bash

upshost="<linux-Box-ip>"

echo "UPS Host: $upshost"
while true
do
    date
    ping -c3 $upshost >/dev/null
    if [[ $? -ne 0 ]]
    then
        echo "WARNING: Ping Failed,trying again in 30 seconds ..."
        sleep 30
        ping -c3 $upshost >/dev/null
        [[ $? -eq 0 ]] || break
    fi
    echo "Host $upshost responded to ping."
    sleep 30
done
date
echo "ERROR: Host $upshost didn't respond to ping."
echo "System will shutdown in 1 minute."
shutdown -h +1 "System will shutdown in 1 minute."

注意:是我的 Linux 机器的实际 IP 地址,它始终相同(保留在路由器设置中)。

任务调度器属性

Runs from SYstem account,whether user is logged on or not,with highest privileges.
Triggers: at system startup
Actions: Start a program
program/script -> c:\cygwin64\bin\bash
arguments -> -l -c "/cygdrive/c/bin/pwrwdog.sh > /cygdrive/c/tmp/pwrwdog.trc"
runs in -> c:\cygwin64\bin
Start if any network connection is available.

我在跟踪记录和任务调度程序历史记录中看到,脚本正确监控来自 Linux 机器的网络响应,当主机停止响应并调用关闭命令时中断监控循环。问题是 - 关机实际上并没有发生:

Host <linux-Box-ip> responded to ping.
Sun,Jan  3,2021  7:23:48 AM
Host <linux-Box-ip> responded to ping.
Sun,2021  7:24:20 AM
WARNING: Ping Failed,trying again in 30 seconds ...
Sun,2021  7:25:16 AM
ERROR: Host <linux-Box-ip> didn't respond to ping.
System will shutdown in 1 minute.
System will shutdown in 1 minute.

我想念什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)