Vagrant выполнить скрипт или команду после каждого гостевого перезапуска (vagrant up)

20

Я знаю о сценарии подготовки, но это другой сценарий, о котором я прошу. Я хочу, чтобы скрипт выполнялся после каждого перезапуска гостя.

Я использую средство обеспечения оболочки.

config.vm.provision :shell, path: "vagrant/bootstrap.sh"

Я не могу поместить свои команды в этот скрипт, который я хочу запустить после каждого перезапуска.

В принципе, я хочу, чтобы одно из моих приложений запускалось, когда пользователь выполнил vagrant up .

Мой гость ubuntu 14.04 trusty, и одно решение, которое я нашел, должно было делать следующее на моем гостю -

sudo crontab -e
#add the following line 
@reboot sh /path/to/my_script_on_guest.sh

Я могу попытаться сделать это в моем сценарии инициализации, но sudo crontab -e запрашивает редактор, и мне нужно как бы интерактивно добавить строку. Поскольку файл crontab не исправлен, я не знаю, возможно ли выполнить один файл с файловым файлом, например

echo '@reboot sh /path/to/my_script_on_guest.sh' >> crontab_file

Я предполагаю, что это должна быть специфическая гостевая ОС.

Можно ли достичь использования Vagrant?

РЕДАКТИРОВАТЬ: исправлено с помощью ssh-ассистента в средство обеспечения оболочки.

    
задан Pranav Shukla 13.05.2016 в 12:59
источник

1 ответ

30

вы можете использовать run: 'always'

config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'

Это гарантирует, что ваша команда будет выполняться каждый раз, когда ваша виртуальная машина запускается (бродячая или бродячая перезагрузка)

Если вам нужно только выполнить определенные команды, вы можете разделить свой скрипт

config.vm.provision :shell, path: "vagrant/bootstrap1.sh"
config.vm.provision :shell, path: "vagrant/bootstrap2.sh", run: 'always'
config.vm.provision :shell, path: "vagrant/bootstrap3.sh"

сценарий будет запущен в порядке, bootstrap1 затем 2, затем 3, когда машина будет сначала обеспечена

в любое другое время, когда вы запустите vagrant up (или перезагрузите), будет запущен только bootstrap2

    
ответ дан Frédéric Henri 13.05.2016 в 13:16
  • Спасибо. Но у меня есть другие шаги в моем bootstrap.sh, которые не являются идемпотентными. Есть ли еще один крючок жизненного цикла? –  Pranav Shukla 13.05.2016 в 13:24
  • да ясно, так что разделите свой скрипт и сделайте вещи невосприимчивыми в другом скрипте и не запускайте их всегда - скрипты запускаются в порядке –  Frédéric Henri 13.05.2016 в 13:37
  • Я просто пытался это, и это работает :) спасибо. –  Pranav Shukla 13.05.2016 в 13:40