私はbashでチュートリアルを読んでいましたが、マシンを再起動するように言われました。サービスを直接再起動するオプションはありませんでした。マシンを再起動するだけの問題でした。その後、プロビジョニング時に実行する必要があるコマンドがさらにありました。 。
それで、プロビジョニングの途中でボックスを再起動し、その後中断したところから再開する方法はありますか?
私の知る限り、次のように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
私はこれを行ったことはありませんが、必要に応じて、スクリプトを2つの部分に分割します。1つは再起動前に再起動コマンドを含み、もう1つはインストール後です。
最初のものもロックファイルを作成します。
全体的なスクリプトは、ロックファイルが存在しない場合は最初のスクリプトを実行し、ファイルが存在する場合は2番目のスクリプトを実行します。この全体的なスクリプトは、起動用に設定されます。
採用できるトリックの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.
Vagrantにはプロビジョニングのための再起動オプションがありますが、ゲストの再起動機能は現在Linuxをサポートしていません。
ここで私のプラグインをチェックできます https://github.com/secret104278/vagrant_reboot_linux/tree/master 、Linuxが再起動する機能を実装しました。