我正在尝试编写一些脚本以从我的 UPS 正常关闭。我的 UPS 连接到我的 freenas 系统。我还有一个在 Ubuntu 18.04 上运行 KVM 的 KVM 服务器,这就是我遇到的一些问题。我的 freenas 上有以下脚本来调用 KVM 服务器上的关闭脚本:
ssh [email protected] /opt/shutdown.sh
那么shutdown.sh
我的KVM服务器上的脚本如下
#!/bin/bash
# Configure timeout (in seconds).
TIMEOUT=300
VIRSH=/usr/bin/virsh
# List running domains.
list_running_domains() {
$VIRSH list | grep running | awk '{ print $2}'
}
echo "Try to cleanly shut down all running KVM domains..."
# Create some sort of semaphore.
touch /tmp/shutdown-kvm-guests
# Try to shutdown each domain, one by one.
list_running_domains | while read DOMAIN; do
# Try to shutdown given domain.
$VIRSH shutdown $DOMAIN
done
# Wait until all domains are shut down or timeout has reached.
END_TIME=$(date -d "$TIMEOUT seconds" +%s)
while [ $(date +%s) -lt $END_TIME ]; do
# Break while loop when no domains are left.
test -z "$(list_running_domains)" && break
# Wait a litte, we don't want to DoS libvirt.
sleep 1
done
# Clean up left over domains, one by one.
list_running_domains | while read DOMAIN; do
# Try to shutdown given domain.
$VIRSH destroy $DOMAIN
# Give libvirt some time for killing off the domain.
sleep 3
done
我在这里找到了KVM脚本在此输入链接描述
当我直接通过 SSH 连接到 KVM 服务器时,KVM 关闭脚本工作得很好,但是,当 freenas 系统通过 SSH 调用该脚本时,它似乎不起作用。我可以看到回声,所以我知道它正在被呼叫。我知道这不是最佳实践,但我将脚本的权限设置为 777 只是为了看看是否可以让它工作,但这似乎仍然没有帮助。任何见解将不胜感激。
答案1
我找到了罪魁祸首。它实际上与 SSH 或权限无关。我必须LIBVIRT_DEFAULT_URI=qemu:///system
在 KVM 服务器脚本上的所有 virsh 命令之前添加。