Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Może temat niezbyt trafny ale już piszę o co mi chodzi :)
Postawiłem Virtualboxa na nim kilka maszyn wirtualnych.
Zrobiłem skrypt który je startuje (przy starcie systemu gospodarza) i chciałbym zrobić że przy zamykaniu gospodarza goście są odłączania ale nie poweroff tylko jak należy czyli albo savestate albo acpibutton
Skrypt startuje na samym końcu natomiast przy zamykaniu systemu odpala się na początku przy czym dałem w nim warunek sprawdzania czy VM już się zamknęły czy jeszcze nie
fragment skryptu:
stop) echo "Stopping VirtualMachine" /root/bin/vmcontrol.sh VM1 save /root/bin/vmcontrol.sh VM2 stop while [ "`su -c 'VBoxManage list runningvms' -s /bin/bash my_user_id`" != "" ] do begin_msg "Waiting for VM shutdown ..." sleep 3 done succ_msg ;; *)
czyli teoretycznie skrypt w pętli powinien zaczekać aż VM-y się poprawnie zamkną i przejść dalej.
W rzeczywistości nie czaka, system odpala kolejne skrypty i cały vbox jest odłączany i z mojego "eleganckie" savestate wszystko idzie w diabły.
Jak mogę wymusić na systemie (Debian 7) by zaczekał aż ten skrypt się wykona i dopiero dalej przechodził do kolejnych skryptów.
Lista dla rc0
lrwxrwxrwx 1 root root 13 mar 27 19:13 K01atd -> ../init.d/atd lrwxrwxrwx 1 root root 15 mar 27 19:13 K01exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 17 mar 29 00:46 K01urandom -> ../init.d/urandom lrwxrwxrwx 1 root root 19 mar 29 13:18 K01vbcontrol -> ../init.d/vbcontrol lrwxrwxrwx 1 root root 31 mar 27 20:13 K01vboxautostart-service -> ../init.d/vboxautostart-service lrwxrwxrwx 1 root root 33 mar 27 20:13 K01vboxballoonctrl-service -> ../init.d/vboxballoonctrl-service lrwxrwxrwx 1 root root 25 mar 27 20:13 K01vboxweb-service -> ../init.d/vboxweb-service lrwxrwxrwx 1 root root 18 mar 27 19:13 K02sendsigs -> ../init.d/sendsigs lrwxrwxrwx 1 root root 17 mar 27 20:13 K02vboxdrv -> ../init.d/vboxdrv lrwxrwxrwx 1 root root 17 mar 27 19:13 K03rsyslog -> ../init.d/rsyslog lrwxrwxrwx 1 root root 22 mar 27 19:13 K04umountnfs.sh -> ../init.d/umountnfs.sh lrwxrwxrwx 1 root root 20 mar 27 19:13 K05nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 17 mar 27 19:13 K05rpcbind -> ../init.d/rpcbind lrwxrwxrwx 1 root root 20 mar 27 19:13 K06hwclock.sh -> ../init.d/hwclock.sh lrwxrwxrwx 1 root root 20 mar 27 19:13 K06networking -> ../init.d/networking lrwxrwxrwx 1 root root 18 mar 27 19:13 K07umountfs -> ../init.d/umountfs lrwxrwxrwx 1 root root 20 mar 27 19:13 K08umountroot -> ../init.d/umountroot lrwxrwxrwx 1 root root 14 mar 27 19:13 K09halt -> ../init.d/halt
mój skrypt vbcontrol jest wykonywany przed innymi od Vbox-a (bo tak chciałem że zanim zamknie się zały Vbox to ja najpierw wyłączę albo zachowam stan maszyn ... a tu d...!
Dopiszę jeszcze że skrypt odpalony z palca
/etc/init.d/vbcontrol stop
działa jak najbardziej poprawnie tylko jak jest automatycznie wykonywany to jest lipa.
Ostatnio edytowany przez life (2015-03-29 16:33:52)
Offline
To jest Systemd czy SysVinit?
Do SysVinit nie ma chyba co klepać osobnego skryptu (ten już idzie na emeryturę - stabilny Jessie za kilkanaście tygodni), za to w Systemd musisz obczaić zależności skryptu, na 99% tam to załatwisz, ale tu już bym pytał Morfika albo Yossariana.
Ostatnio edytowany przez Jacekalex (2015-03-29 16:41:33)
Offline
Cześć.
automatyczne wyłączanie maszyn przy wyłączaniu hosta-debiana:
/etc/default/virtualbox [plik tworzony przy instalacji virtualboxa tak jak skrypt /etc/init.d/virtualbox]
#Set this to 1 if you would like the virtualbox modules to be loaded by the init script. LOAD_VBOXDRV_MODULE=1 # SHUTDOWN_USERS="foo bar" # check for running VMs of user 'foo' and user 'bar' # 'all' checks for all active users # SHUTDOWN=poweroff # SHUTDOWN=acpibutton # SHUTDOWN=savestate # select one of these shutdown methods for running VMs # acpibutton and savestate causes the init script to wait # 30 seconds for the VMs to shutdown SHUTDOWN_USERS="vboxuser" SHUTDOWN=savestate
automatyczne startowanie maszyn:
/etc/rc.local:
su - vboxuser -c "VBoxManage startvm NazwaMaszynki --type headless"&& sleep 2&& su - vboxuser -c "VBoxManage startvm NazwaMaszynki2 --type headless"&& exit 0
Taki zestaw działa na sysvinit na systemd pewnie też.
A jak nie rc.local to w instalkach virtualboxa z repo Oracla jest skrypt vboxautostart-service, którego w repo debiana niema:
[url]https://www.virtualbox.org/manual/ch09.html#autostart-linux[/url]
[url]https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=748691[/url]
[url]http://lifeofageekadmin.com/how-to-set-your-virtualbox-vm-to-automatically-startup/[/url]
Offline
Na systemd to nie byłoby raczej problemów -- jeden plik service z przełącznikiem "@nazwa_maszyny" na każdą z dostępnych maszyn i uzależnić to od konkretnego urządzenia (dysku, partycji), na którym te obrazy maszyn wirtualnych się znajdują, albo punktu montowania, np. na wypadek skanowania systemu plików, by usługa czekała z odpalaniem maszyn, aż system plików się zamontuje. Pewnie też i zależności z dostępem sieci by się przydały, jeśli te maszyny wymagają jej do działania.
A przy zamykaniu systemu, to trzeba by odpowiednie polecenia dopisać, bo ja nie mam w sumie pojęcia jakie polecenia wyłączają te maszyny tak jak chcesz ale jeśli idzie to zrobić via cmd, to w plikach service nie będzie z tym żadnego problemu, a że kolejność wyłączania usług jest odwrotna w stosunku do ich startu, to wszystko się ładnie powinno wyłączyć, tyle teorii. xD
Offline
Dzięki za odzew.
Jeżeli chodzi o rozwiązanie skryptami virtualboxa to co zaproponował peadyr to też na to trafiłem ale kilka stron miało kilka opisów i jakoś to nie za bardzo mi działało wszystko, generalnie porzuciłem ten sposób i skupiłem się na swoich prymitywnych skryptach.
Trochę posiedziałem i zrobiłem tak jak chciałem.
Oto moje wypociny:
Sam skrypt do sterowania maszynami: /usr/local/sbin/vmcontroll.sh
#! /bin/sh VMUSER=nazwa_usera VMNAME="$1" CMD=cmd case "$2" in start) echo "Starting VM: $1" su -c "nohup VBoxHeadless --vrde=off --startvm $1 >/dev/null 2>&1 &" -s /bin/bash -l "$VMUSER" ;; save) echo "Saving state of VM: $VMNAME" su -c "/usr/bin/VBoxManage controlvm $VMNAME savestate" -s /bin/bash -l "$VMUSER" while [ "$CMD" != "" ] do CMD=`su -s /bin/bash $VMUSER -c "/usr/bin/VBoxManage list runningvms | grep $VMNAME"` echo "Waiting for VM shutdown ..." sleep 3 done ;; pause) echo "Pause VM: $VMNAME" su -c "/usr/bin/VBoxManage controlvm $VMNAME pause" -s /bin/bash -l "$VMUSER" ;; resume) echo "Resume VM: $VMNAME" su -c "/usr/bin/VBoxManage controlvm $VMNAME resume" -s /bin/bash -l "$VMUSER" ;; restart) echo "Reset VM: $1" su -c "/usr/bin/VBoxManage controlvm $VMNAME reset" -s /bin/bash -l "$VMUSER" ;; stop) echo "Powering off (acpi) VM: $VMNAME" su -c "/usr/bin/VBoxManage controlvm $VMNAME acpipowerbutton" -s /bin/bash -l "$VMUSER" while [ "$CMD" != "" ] do CMD=`su -s /bin/bash $VMUSER -c "/usr/bin/VBoxManage list runningvms | grep $VMNAME"` echo "Waiting for VM shutdown ..." sleep 3 done ;; poweroff) echo "Powering off VM: $VMNAME" su -c "/usr/bin/VBoxManage controlvm $VMNAME poweroff" -s /bin/bash -l "$VMUSER" while [ "$CMD" != "" ] do CMD=`su -s /bin/bash $VMUSER -c "/usr/bin/VBoxManage list runningvms | grep $VMNAME"` echo "Waiting for VM shutdown ..." sleep 3 done ;; *) echo "Usage: /usr/local/sbin/vmcontroll.sh {start|stop|save|pause|resume|restart|poweroff}" exit 1 ;; esac exit 0
Działanie skryptu bardzo proste jako pierwszy parametr podajemy nazwę VM a drug to akcja jaką chcemy zrobić (start, stop, save, pause, resume, restart, poweroff)
Ja potrzebuję tego dla jednego usera więc wystarczy mi wpisanie go na "sztywno" w zmienną, ktoś chce dla kilku to nie problem przerobić.
no i teraz plik startowy: /etc/init.d/vmcontroll
#! /bin/sh # /etc/init.d/vmcontroll ### BEGIN INIT INFO # Provides: vmcontroll # Required-Start: vboxdrv # Required-Stop: exim4 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Kontrola uruchamiania VM przez system. # Description: Enable service provided by daemon. ### END INIT INFO case "$1" in start) echo "Starting VirtualMachines " /usr/local/sbin/vmcontroll.sh testXP start /usr/local/sbin/vmcontroll.sh deb1 start ;; stop) echo "Stopping VirtualMachine" /usr/local/sbin/vmcontroll.sh testXP save /usr/local/sbin/vmcontroll.sh deb1 stop ;; *) echo "Usage: /etc/init.d/vmcontroll {start|stop}" exit 1 ;; esac exit 0
Jak widać przy włączeniu kompa startują dwie maszyny (Debian i WinXP) przy wyłączeniu debian jest zamykany (acpioff) czyli symulacja wciśnięcia przycisku zasilania a dla WinXP jest akcja save czyli coś jak "hibernacja" zapisuje jego stan i startuje w takiej samej formie jak był zamknięty. Kombinować można już do woli :)
może się komuś przyda więc niech korzysta :)
Ostatnio edytowany przez life (2015-03-30 18:05:38)
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00008 | SET CHARSET latin2 |
0.00003 | SET NAMES latin2 |
0.00081 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.191.178.16' WHERE u.id=1 |
0.00056 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.191.178.16', 1732756293) |
0.00042 | SELECT * FROM punbb_online WHERE logged<1732755993 |
0.00067 | SELECT topic_id FROM punbb_posts WHERE id=285240 |
0.00108 | SELECT id FROM punbb_posts WHERE topic_id=27229 ORDER BY posted |
0.00059 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=27229 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00078 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=27229 ORDER BY p.id LIMIT 0,25 |
0.00071 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27229 |
Total query time: 0.00579 s |