0

特定の仮想マシンを再起動、起動、シャットダウンしようとしています。ここでは、まず、スクリプトを実行する前に、仮想マシンが既に必要な状態になっているかどうかを確認します。

これらは VM のリストです。

[root@demohost05 ~]# virsh list --all
Id    Name                           State
----------------------------------------------------
5     OwnCloud01                     running
6     OwnCloud02                     running
7     SiteMon                        running
-     vmtest                         shut off

実装する前に vmtest が実行されているかどうかを確認したい

virsh start vmtest

シェルスクリプトで if 条件を使用してステータスを確認するにはどうすればよいですか?

sudo コマンドを使用しなければならないときにパスワードを入力しないようにするにはどうすればよいですか。

sudo virsh start vmtest

を使用してルート権限を付与しようとしました

sudo -i
virsh start vmtest

しかし、スクリプトは 2 行目を実装せずに終了します。同じスクリプト ファイルで両方のコマンドを使用するにはどうすればよいですか?

if [conditions]
then
{

}
fi

そのようなスクリプトの条件を確認する方法がわかりませんでした。

ありがとうございました。

4

5 に答える 5

3

これを試して:


tmp=$(virsh list --all | grep " vmtest " | awk '{ print $3}')
if ([ "x$tmp" == "x" ] || [ "x$tmp" != "xrunning" ])
then
    echo "VM does not exist or is shut down!"
    # Try additional commands here...
else
    echo "VM is running!"
fi

# For passwordless sudo:
sudo cat /etc/sudoers

# You'll see this:

# User privilege specification
root    ALL=(ALL:ALL) ALL

# To add user sharad as a sudo user:

# User privilege specification
root    ALL=(ALL:ALL) ALL
sharad  ALL=(ALL:ALL) ALL

# To add user sharad as a sudo user such that it doesn't ask for password (note the NOPASSWD):

# User privilege specification
root    ALL=(ALL:ALL) ALL
sharad  ALL=(ALL:ALL) NOPASSWD: ALL

# Read this for reference: http://www.ducea.com/2006/06/18/linux-tips-password-usage-in-sudo-passwd-nopasswd/
于 2016-05-26T07:20:59.083 に答える
1

私のシナリオは少し違うので、少し違う解決策を得ました。

xfreerdpVM (Windows) を起動し、オールインワン スクリプトで接続したいと考えています。これが機能するには、ポート 3389 が VM 内で開かれている必要があります。これは、VM の起動直後ではありませんが、virsh list --all「実行中」が返されます。ncしたがって、 (aka netcat)を使用してポートをチェックする私の小さなスクリプトは次のとおりです。

# "windows_vm" is the VM-name, while "windows_guest" is the VM's hostname
virsh dominfo windows_vm | grep 'State: *shut off'
if [ $? -eq 0 ]; then
  echo "Start windows_vm..."
  virsh start windows_vm
  while true; do
    echo "Waiting for start..."
    # nc-parameters:
    #   -w1: wait 1s
    #   -z: ony scan the port without sending data
    nc -w1 -z windows_guest 3389 
    if [ $? -eq 0 ]; then
      break
    fi
    sleep 1
  done
fi

xfreerdp /v:windows_guest ...some-more-parameters...

Windows でリモート デスクトップ機能が有効になっていない場合は、他のポートを確認できる可能性があります。

ゲストが Linux-VM の場合、ポート 22 は常に試してみる価値があります。

于 2020-05-06T08:05:47.927 に答える