ExecuteInAllVEs

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search

I found myself often faced with a need to run the same command in all VEs, e.g. apachectl restart to restart all webservers or dmesg | tail to see the latest news from everybody.

You can loop through all VEs and execute this this easily:

 for veid in `vzlist -Hoveid`; do vzctl exec $veid COMMAND; done 

Knowing this, you can also save some typing later by making a simple utility out of it. I like to call this /usr/sbin/vzexec so I can later just say vzexec apachectl restart

 #!/bin/bash
 # vzexec -- execute a command on all VEs
 if [ "$1" == "" ]; then
   echo "$0 -- Execute a command on all VEs"
   echo ""
   echo "Example: vzexec service httpd restart"
   echo ""
   echo "Note that variables are expanded in the host's shell, and use ' ' to prevent this."
   echo "Example:   vzexec echo \$PWD    and   vzexec 'echo \$PWD'   are different."
   exit
 fi
 for veid in `vzlist -Hoveid`; do
   echo "*** VE $veid"
   vzctl exec $veid $@
 done