Автор Тема: Перевод VirtualBox в спящий режим при выключении или перезагрузке  (Прочитано 698 раз)

Оффлайн a80h19

  • Начинающий
  • *
  • Сообщений: 1
На машине под управлением Alt9 установлен VirtualBox. Нужно, чтобы при выключении или перезагрузке запущенная виртуалка автоматически переводилась в спящий режим.

Написал следующий скрипт
-bash-4.4$ cat /etc/init.d/AxiSrvSlp.sh
#!/bin/sh

### BEGIN INIT INFO
# Provides:             AxiSrvSleep
# Required-Start:       $all
# Required-Stop:        $all
# Default-Start:        3 4 5
# Default-Stop:         0 1 2 6
# Short-Description:    AxiSrvSleep
# Description:          AxiSrvSleep
### END INIT INFO

lock_file=/var/lock/subsys/axisrv


start() {
    touch "$lock_file"
    echo "start" >> /home/atgs/axisrv.log
}

stop() {
    export HOME="/home/atgs"
    su atgs -c "VBoxManage controlvm axisrv savestate" &>> /home/atgs/axisrv.log
    export HOME="root"
    date +%D' '%T >> /home/atgs/axisrv.log
    echo "VM axisrv shutdown" >> /home/atgs/axisrv.log
    rm -f "$lock_file"

}

restart()
{
        stop
        start
}


case $1 in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                restart
                ;;
        *)
                echo "$1" >> /home/atgs/axisrv.log
esac

exit 0;

и выполнил команду chkconfig --add /etc/init.d/AxiSrvSlp.sh, после чего на скрипт появились следующие ссылки (были с 50-м номером, я передвинул 4-ю позицию).

-bash-4.4$ ls -ahl /etc/rc.d/rc{0,1,2,3,4,5,6}.d|grep Axi
lrwxrwxrwx  1 root root   22 июн  4 21:59 K04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh
lrwxrwxrwx  1 root root   22 июн  4 21:59 K04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh
lrwxrwxrwx  1 root root   22 июн  4 21:59 K04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh
lrwxrwxrwx  1 root root   22 июн  4 21:59 S04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh
lrwxrwxrwx  1 root root   22 июн  4 21:59 S04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh
lrwxrwxrwx  1 root root   22 июн  4 21:59 S04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh
lrwxrwxrwx  1 root root   22 июн  4 21:59 K04AxiSrvSlp.sh -> ../init.d/AxiSrvSlp.sh

Скрипт успешно выполняется при выключении системы. Проблема в том, что он выполняется уже после того, как VirtualBox нештатно завершает работу виртуалки. Вот что пишется в логе:

start
VBoxManage: error: Machine 'axisrv' is not currently running
06/04/20 22:47:02
VM axisrv shutdown

Что я упускаю? По идее, скрипт должен выполниться самым первым.

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 159
# Required-Stop: @all
Я так понимаю, значит, что скрипт отработает завершение после всех остальных
А Вам надо править так, чтобы virtualbox завершался после завершения вашего скрипта, т.е. править зависимости в скрипте virtualbox
Не уверен, что это надежный вариант...