[Nut-upsuser] Perform synchronous task before shutdown routine

Manuel Wolfshant wolfy at nobugconsulting.ro
Sun Jun 13 16:44:56 BST 2021

On 6/13/21 6:29 PM, Arnaldo Viegas de Lima wrote:
> Hi and thanks for the reply!
> The “real” scenario is a bit more complex. There is more than one file 
> server and they must be shutdown only after the VM’s are down. And 
> there are 2 VMWare servers...
> UPS can be connected using USB cable or SNMP. All involved machines 
> and network switches are connected the same UPS. A simplified scenario is:
> 1-Server “A” runs VMWare and has a USB connection to the UPS (3KVA APC)
> 2-Server “B” also runs VMWare
> 3-Servers “C”. And “D” are file servers 
(Linux based) providing iSCSI 
> disks to the VMWare servers
> 4-All machines are connected to one switch that is also connected to 
> the UPS
> 5-All VMs running on servers “A” and “B” 
have their disks coming from 
> servers “C” and “D”, except from the NUT VM
> 6-VM running NUT runs from the local filesystem on server “A” (or 
> “B”). This allow for the fileservers to be shutdown independently.
> The requirement is that before servers “C” and “D” can shutdown, all 
> VM’s running on servers “A” and “B” must be properly shutdown.
> I have a script that shutdown (or power down) all VMs on both VMWare 
> servers, except for the NUT VM. Also shutdown is performed in a 
> particular sequence to allow for dependencies, multiple machines at 
> the same time (accounting for disk and CPU bottlenecks) and for VM’s 
> without VMWare/Open VMTools. The script uses VMWare remote API (much 
> like their Web based management). This part is great and works very nice.
> I also have a script, that fired from the NUT VM that commands a 
> delayed shutdown of the host VMWare system (that should have no VM’s 
> running except the NUT one) and shuts itself down (ahead of the host 
> VMWare). It will also command the UPS off.
>  This is the shutdown command for the master upsmon.
> Those 2 pieces work fine, if tested independently.
> My problem is that after shutdown all VMs and before shutting down the 
> NUT VM and associated VMWAre host, I must shutdown the fileservers “C” 
> and “D”. I can do that running upsmon in slave mode. But I must ensure 
> that it will not happen before all VMs are properly down. So there are 
> 3 synchronous steps, after OB+LB:
> 1-Shutdown all VMs (except NUT’s)
> 2-Shutdown fileservers
> 3-Command VMWare and UPS delayed off and shutdown NUT VM.
> Since 3 is a script, I can have it wait for 2 to complete (time or use 
> a network based test). My main problem is to delay “2” until the end 
> of “1”.

have step 2 wait for a semaphore set immediately before exit by the 
script that implements step 1.  brute force approach would be a wrapper 
around if(ping) ( ping returns "1" if target is unreachable and "0" in 
case of success ) but smarter methods can be imagined

More information about the Nut-upsuser mailing list