На всякий случай были написаны скрипты для автоматического старта и корректного завершения работы виртуальных машин(в случае потери питания, выполняется демоном apcupsd)
Из интересных(по крайней мере для меня) моментов я бы хотел отметить способ запуска команды от имени определённого пользователя, даже если скрипт запущен от root’а. Это необходимо потому, что VirtualBox привязывает виртуалки к пользователю, и если запустить от root’а vboxmanage list runningvms при запущенных виртуалках, он ничего о них не скажет. По этому был на коленке быстренько написан следующий код:
startvm.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash killall vboxwebsrv || true #to avoid multiple running vboxwebsrv if [ "$(whoami)" == 'root' ]; then su firefish -c 'vboxwebsrv >/dev/null 2>/dev/null &' # su firefish -c 'vboxheadless --comment a2b --startvm 71be8945-2936-4289-a18f-c411aa92e7c4 --vrde config >/dev/null 2>/dev/null &' su firefish -c 'vboxheadless --comment docs --startvm 304e28c7-3252-4f25-aa31-58b9e4a93936 --vrde config >/dev/null 2>/dev/null &' su firefish -c 'vboxheadless --comment vcs --startvm 1d042c70-4998-4fc8-964c-843e2cd3abbf --vrde config >/dev/null 2>/dev/null &' else vboxwebsrv >/dev/null 2>/dev/null & # vboxheadless --comment a2b --startvm 71be8945-2936-4289-a18f-c411aa92e7c4 --vrde config >/dev/null 2>/dev/null & vboxheadless --comment docs --startvm 304e28c7-3252-4f25-aa31-58b9e4a93936 --vrde config >/dev/null 2>/dev/null & vboxheadless --comment vcs --startvm 1d042c70-4998-4fc8-964c-843e2cd3abbf --vrde config >/dev/null 2>/dev/null & fi |
stopvm.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash echo "shutting down started" | wall if [ "$(whoami)" == 'root' ]; then su firefish -c 'vboxmanage controlvm 71be8945-2936-4289-a18f-c411aa92e7c4 acpipowerbutton' su firefish -c 'vboxmanage controlvm 304e28c7-3252-4f25-aa31-58b9e4a93936 acpipowerbutton' su firefish -c 'vboxmanage controlvm 1d042c70-4998-4fc8-964c-843e2cd3abbf acpipowerbutton' while [ "$(su firefish -c 'vboxmanage list runningvms')" != '' ]; do sleep 1; done else vboxmanage controlvm 71be8945-2936-4289-a18f-c411aa92e7c4 acpipowerbutton vboxmanage controlvm 304e28c7-3252-4f25-aa31-58b9e4a93936 acpipowerbutton vboxmanage controlvm 1d042c70-4998-4fc8-964c-843e2cd3abbf acpipowerbutton while [ "$(vboxmanage list runningvms)" != '' ]; do sleep 1; done fi echo "shutting down completed" | wall |
А заключения не будет. Могу только сказать, что при добавлении /home/firefish/stopvm.sh в /etc/apcupsd/onbattery, оно таки заработало:
1 2 3 4 5 6 7 8 9 |
Broadcast Message from root@vmhost (somewhere) at 1:47 ... shutting down started Broadcast Message from root@vmhost (somewhere) at 1:47 ... shutting down completed |
Интервал ONBATTERYDELAY увеличен до 30 секунд для игнорирования отключений электричества на короткое время. Хотя первый проваленный этой логикой тэсткейз — несколько подряд отключений на 29 секунд. Будем надеятся, что фикс будет написан раньше, чем это случится.