web-dev-qa-db-ja.com

Vagrantとピックアップを使用してマシンをプロビジョニングするときに、スクリプトが中断したところにマシンを再起動することは可能ですか?

私はbashでチュートリアルを読んでいましたが、マシンを再起動するように言われました。サービスを直接再起動するオプションはありませんでした。マシンを再起動するだけの問題でした。その後、プロビジョニング時に実行する必要があるコマンドがさらにありました。 。

それで、プロビジョニングの途中でボックスを再起動し、その後中断したところから再開する方法はありますか?

19
leeand00

私の知る限り、次のようにOSを再起動しようとした場合に中断された場所で実行される単一のスクリプト/コマンドセットはありません。

  config.vm.provision "Shell", inline: <<-Shell
    echo $(date) > ~/rebootexample
    reboot
    echo $(date) >> ~/rebootexample
  Shell

この例では、2番目のエコーコールは実行されません。

スクリプト/コマンドを分割して、 vagrant reload などのプラグインを使用できます。

Vagrantfileのスニペットの例は、可能な使用法を強調しています:

  # execute code before reload
  config.vm.provision "Shell", inline: <<-Shell
     echo $(date) > ~/rebootexample
  Shell

  # trigger reload
  config.vm.provision :reload

  # execute code after reload
  config.vm.provision "Shell", inline: <<-Shell
     echo $(date) >> ~/rebootexample
  Shell
20
jaxim

私はこれを行ったことはありませんが、必要に応じて、スクリプトを2つの部分に分割します。1つは再起動前に再起動コマンドを含み、もう1つはインストール後です。

最初のものもロックファイルを作成します。

全体的なスクリプトは、ロックファイルが存在しない場合は最初のスクリプトを実行し、ファイルが存在する場合は2番目のスクリプトを実行します。この全体的なスクリプトは、起動用に設定されます。

3
Marc Young

採用できるトリックの1つは、再起動信号を送信し、残りのプロビジョニング作業を起動時に実行するスクリプトとして保存することです。

config.vm.provision "Shell", inline: <<-Shell
  echo "Do your thing... DONE"
cat <<-RCLOCAL | sed -s 's_^      __' > /etc/rc.local
      #!/bin/bash
      echo "This will be run once on next boot and then it's destroyed and never run again"
      rm /etc/rc.local
RCLOCAL
  chmod o+x /etc/rc.local
  shutdown -r now #restart
Shell

これはdebian 9で動作するようにテストされているため、サービスを有効にするか、別の何かを実行している場合は、コードをブートストラップして次のブートで実行する別の方法を見つける必要があるかもしれません。

残念ながら、あなたは単純に行うことはできません:

config.vm.provision "Shell", inline: "shutdown -r now"
config.vm.provision "Shell", inline: "echo 'hello world'"

results in ==>
The SSH connection was unexpectedly closed by the remote end. This
usually indicates that SSH within the guest machine was unable to
properly start up. Please boot the VM in GUI mode to check whether
it is booting properly.
1
Timo

Vagrantにはプロビジョニングのための再起動オプションがありますが、ゲストの再起動機能は現在Linuxをサポートしていません。

ここで私のプラグインをチェックできます https://github.com/secret104278/vagrant_reboot_linux/tree/master 、Linuxが再起動する機能を実装しました。

0
王予智