스크립트는 suspens-to-hibernate.service가 아닌 터미널에서 실행됩니다.

스크립트는 suspens-to-hibernate.service가 아닌 터미널에서 실행됩니다.

실행 중인 가상 머신이 있는지 확인하고 있는 경우 정상적으로 종료하는 스크립트가 있습니다(VBoxManage 사용). 내 머신에서 호출되면 VM에서 실행 중인 데이터베이스가 문제를 겪지 않을 것이라는 생각입니다. 재개 시 시간 점프로 인한 문제.

스크립트는 명령줄에서 제대로 실행되지만 내가 만든 suspend-to-hibernate.service 파일에서 호출할 때는 실행되지 않습니다!

일어나야 할 일은 스크립트가 VBoxManage를 호출하여 실행 중인 머신을 나열하고, 이를 awk로 파이프하여 VM의 이름을 추출하고, 모든 것을 다른 파일에 덤프한 다음 머신을 종료하기 위해 호출된다는 것입니다.

VBoxManage를 호출할 때까지 잘 실행됩니다. 명령이 단순히 실행되지 않는 것 같습니다. /usr/bin/VBoxManage는 실제로 /usr/lib/virtualbox/VBoxManage를 호출하는 스크립트에 대한 링크입니다. 직접 전화해 보았지만 여전히 실행되지 않습니다.

stop-vms.log는 '즉시' 스크립트가 실제로 실행된다는 것을 보여줍니다.

유닉스 스크립팅을 해본 지 꽤 시간이 지났는데 아주 간단한 것을 놓친 것 같은 느낌이 듭니다...

일시 중지-최대 절전 모드.서비스:

[Unit]
Description=Script to check for VirtualBox VMs and pause them
Conflicts=hibernate.target hybrid-suspend.target
Before=suspend.target sleep.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh /home/steve/Documents/scripts/stop-vms.sh suspend
[Install]
WantedBy=sleep.target
RequiredBy=suspend.target

중지-vms.sh:

#!/bin/sh
# some vars:

NEWSCRIPT=/home/steve/Documents/scripts/stopvms
SHELL=/bin/sh
LOGFILE=/home/steve/logs/stop-vms.log


# check if script file exists, if not create & make executable
if [ ! -e $NEWSCRIPT ]
then
    touch $NEWSCRIPT
    chmod 775 $NEWSCRIPT
fi

# tell the script where the shell is
echo '#!'$SHELL > $NEWSCRIPT
echo '#starting at:' `date` >> $NEWSCRIPT

# get list of running machines and dump into script file


echo 'echo "running vms" >> /home/steve/logs/stop-vms.log' >> $NEWSCRIPT      

/usr/bin/VBoxManage list runningvms | awk  '{print "/usr/lib/virtualbox/VBoxManage controlvm " substr($line, 1, index($line,"{")-2) " acpipowerbutton >> /home/steve/logs/stop-vms.log "} '  >> $NEWSCRIPT

echo 'vms done, about to run script  at ' `date` >> $LOGFILE

# run the script

$NEWSCRIPT 
# now wait to make sure the previous command has had time to finish...

sleep 30

# report on last run...
echo >> $NEWSCRIPT
echo '# Last Run: ' `date` >> $NEWSCRIPT

예상되는 stopvms 스크립트(터미널에서 실행하는 경우)

#!/bin/sh
#starting at: Wed 31 Jan 10:24:34 GMT 2018
echo "running vms" >> /home/steve/logs/stop-vms.log
/usr/lib/virtualbox/VBoxManage controlvm "Dev Mysql GlassFish" acpipowerbutton >> /home/steve/logs/stop-vms.log 

# Last Run:  Wed 31 Jan 10:25:04 GMT 2018

suspens-to-hibernate.service에서 실행될 때의 실제 결과:

#!/bin/sh
#starting at: Wed 31 Jan 10:59:26 GMT 2018
echo "running vms" >> /home/steve/logs/stop-vms.log

# Last Run:  Wed 31 Jan 10:59:56 GMT 2018

관련 정보