![如果脚本因为计算机关闭而失败,或者脚本认为它运行正常但实际上并非如此,如何触发失败警报?](https://linux22.com/image/1615322/%E5%A6%82%E6%9E%9C%E8%84%9A%E6%9C%AC%E5%9B%A0%E4%B8%BA%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%85%B3%E9%97%AD%E8%80%8C%E5%A4%B1%E8%B4%A5%EF%BC%8C%E6%88%96%E8%80%85%E8%84%9A%E6%9C%AC%E8%AE%A4%E4%B8%BA%E5%AE%83%E8%BF%90%E8%A1%8C%E6%AD%A3%E5%B8%B8%E4%BD%86%E5%AE%9E%E9%99%85%E4%B8%8A%E5%B9%B6%E9%9D%9E%E5%A6%82%E6%AD%A4%EF%BC%8C%E5%A6%82%E4%BD%95%E8%A7%A6%E5%8F%91%E5%A4%B1%E8%B4%A5%E8%AD%A6%E6%8A%A5%EF%BC%9F.png)
我目前正在使用 PowerShell 和任务计划程序来自动执行我目前工作所在的公司的一项任务。此脚本会更新列表,理想情况下每 10 分钟运行一次。我们用来运行此重复脚本的计算机可能会有点不稳定,并且会随机关闭。我正在尝试找到一种方法,当运行脚本的计算机处于离线状态时接收警报。
我想实现此目的的主要方法是每次程序运行时设置一个通知,然后让第二个脚本检查该通知。如果缺少通知表明脚本未运行,它会发送警报。我找到了一个答案,它让我找到了部分答案,但如果机器关闭,我认为它不会起作用。
感谢您花时间帮助解答这个问题。
答案1
我同意其他评论。您需要第二台机器运行连接测试或类似的东西,以检测运行其他代码的机器是否发生故障。这是一个示例 powershell 脚本,如果它没有从另一台机器收到成功的 ping 响应,它会向您发送电子邮件。以下代码假设您使用 0ffice365 邮件/在线交换,但可以更改为您使用的任何代码。
$testComputer = ping 1.1.1.1 -n 1 | select-string "Sent" #replace the 1.1.1.1 with your server that fails
if($testComputer -match 'Sent = 1')
{
write-host("Connection to computer running scheduled task is good.")
}
else
{
write-host("Connection to computer running scheduled task has failed. Check to see if it is offline.")
$computerParamsFailed = "Connection to computer running scheduled task has failed. Check to see if it is offline."
$username="[email protected]" #replace with email
$password=ConvertTo-SecureString "PASSWORDHERE"-AsPlainText -Force #replace what is in quotes with your email password
$mycredentials = New-Object System.Management.Automation.PSCredential ($username, $password)
Send-MailMessage -To [email protected] -subject "Computer has gone offline." -body $computerParamsFailed -UseSsl -Port 587 -SmtpServer smtp.office365.com -From $username -Credential $mycredentials
#change "to" email value
}
可以将其设置为在另一台机器上每 10 分钟运行一次。如果检测到连接,它将不执行任何操作。如果没有收到响应,它将向您发送电子邮件。
答案2
我同意 Worthwelle 的观点。需要有另一台机器来监控运行该脚本的机器的状态。在这种情况下,如果有一台机器足够可靠地监控第一台机器,那么你不妨直接在那台机器上运行脚本。最好的解决方案是……纠正导致运行脚本的机器崩溃的问题,或者干脆更换它。