Skip to contentSkip to conversation

howto control VM from outside (shutdown...)

DISCUSSION Paolo Pedaletti 3 participants 5 messages Jan 19, 2009 – Jan 20, 2009 KVM

lore
Share & tools
lore
#0 lore raw

Ciao,

the question was posted here:
http://www.linux-kvm.com/content/daemonize-vs-monitor-commands

"The original post asked about gracefully shutting down KVM guest using scripts"

When I shutdown the host machine, I want to hibernate/shutdown/screendump/savevm/senkeys/system_powerdown(/migrate?) also all the VM running (without using libvirt)

I could ssh to each VM and halt it, but does exist a better/cleaner solution?

How can I communicate to kvm console?

thank you

Signature · 2 lines
/* Paolo Pedaletti,
 * [email protected] www.pedaletti.it */
#1 lore raw
Quoted 8 lines · Paolo Pedaletti

Ciao,

the question was posted here:
http://www.linux-kvm.com/content/daemonize-vs-monitor-commands

"The original post asked about gracefully shutting down KVM guest using scripts"

Quoted 8 lines

When I shutdown the host machine, I want to hibernate/shutdown/screendump/savevm/senkeys/system_powerdown(/migrate?) also all the VM running (without using libvirt)

I could ssh to each VM and halt it, but does exist a better/cleaner solution?

How can I communicate to kvm console?

Take a look at the qemu -monitor option. You can use it to re-direct the monitor console to a large number of character devices, including sockets. The settings are the same as for the -serial option. I've used it to access the monitor console from a telnet client.

Signature · 1 line
David.
#2 lore raw

Ciao David,
thank you for the answer

Quoted 4 lines

Take a look at the qemu -monitor option. You can use it to re-direct the monitor console to a large number of character devices, including sockets. The settings are the same as for the -serial option. I've used it to access the monitor console from a telnet client.

ok, I have found this:
http://www.linux-kvm.com/content/multiplexing-your-monitor-and-serial-port
http://www.linux-kvm.com/content/two-ways-access-your-virtual-machine-monitor-across-network

and it works, BUT ... why this command doesn't works:

echo -e "info name \n" | nc  127.0.0.1 4444
echo -e "info name \n" | nc  127.0.0.1 4445
neither:
echo "info name" | nc  127.0.0.1 4444
echo "info name" | nc  127.0.0.1 4445

(output:
��������QEMU 0.9.1 monitor - type 'help' for more information )

with this command line option:

	-monitor  telnet:127.0.0.1:4444,server,nowait \
	-serial mon:telnet:127.0.0.1:4445,server,nowait

?

Signature · 1 line
Paolo Pedaletti
#3 lore raw
In reply to David Mair
Quoted 4 lines · David Mair

Take a look at the qemu -monitor option. You can use it to re-direct the monitor console to a large number of character devices, including sockets. The settings are the same as for the -serial option. I've used it to access the monitor console from a telnet client.

I use the the telnet option:

-monitor telnet::[port],server,nowait

For interactive control I use telnet:

  $ telnet localhost [port]

and I can connect to it to run any commands I want. Just be aware that you should exit with Ctrl-C or by making sure you are at the telnet prompt when you issue quit. If you issue quit to the VM, the entire VM will shutdown very, very quickly and ungracefully.

To send commands through a script, I use netcat:

echo "system_powerdown" | netcat -T -c localhost [port]

I also have a PHP script that opens a socket connection to the telnet port, sends the command, and parses the output for errors. I'll be happy to share it. Let me know if you want it.

#4 lore raw

ciao Alberto,

Quoted 1 line

-monitor telnet::[port],server,nowait

ok

Quoted 2 lines

For interactive control I use telnet:

  $ telnet localhost [port]

ok, it works, thank you

Quoted 2 lines

To send commands through a script, I use netcat:
echo "system_powerdown" | netcat -T -c localhost [port]

no, it doesn't work :-(

$ while : ; do echo "info name" | netcat -T lowdelay -C  \
	127.0.0.1 10101  ; sleep 1 ; done

��������QEMU 0.9.1 monitor - type 'help' for more information (qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information
(qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information
(qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information
(qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information
(qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information
(qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information
(qemu) info name��������QEMU 0.9.1 monitor - type 'help' for more information

command line: (kvm-82, ubuntu 8.10 2.6.27-9-server x86_64)

/usr/local/bin/qemu-system-x86_64 -name marco \
	-vnc :10 -monitor telnet:127.0.0.1:10101,server,nowait \
	-cpu qemu64 -m 512 -smp 1 -vga std \
	-drive file=/dev/mapper/vm-vm_marco,if=virtio,cache=off,boot=on\ 	-k it
-usb -usbdevice tablet -localtime -daemonize \
	-net nic,vlan=1,model=e1000,macaddr=52:10:11:01:01:01 \
	-net vde,vlan=1,sock=/var/run/vde2/kvm1_vde.ctl \
	-net nic,vlan=2,model=virtio,macaddr=52:10:11:02:01:01 \
	-net vde,vlan=2,sock=/var/run/vde2/kvm2_vde.ctl \
	-pidfile /home/vm/marco/marco.pid

do you know/understand why it doesn't works for me?

Quoted 3 lines

I also have a PHP script that opens a socket connection to the telnet port, sends the command, and parses the output for errors. I'll be happy to share it. Let me know if you want it.

yes, thank you.

Signature · 2 lines
/* Paolo Pedaletti,
 * [email protected] www.pedaletti.it */