Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

OK, So a little background;

I've been using Windows Home Server as a Backup Appliance, Media Server and Share Server at home for some time. I decided it was costing me allot of juice so very early on added the "Lights Out" add-on to ensure it was only running as and when needed.

I'm now looking to switch to a Linux based server and I'm looking for a similar tool/set of tools for advanced power management.

Now the question;

Anyone got any all-in-one suggestions (i.e with client parts for both Windows and Linux and a server part for the Linux server), or can anyone simply verify that I'll need to set-up all the individual bits for this myself separately?

(A tool similar to "SmartPower" but for linux would be a great start)

share|improve this question
up vote 2 down vote accepted

Unfortunately you did not specify your specific requirements, so it's hard to know, what exactly you need.

However with shell scripts almost anything is possible. I have a shell script that shutdowns the computer, once specific clients (space separated list in the CLIENTS variable) are no longer online and certain processes (space separated list in the PROCESSES variable) are not running for the last 3 checks:


CLIENTS="hanzo twix"


function log() {
    typeset message="$1"
    echo "$(date +'%Y-%m-%d %H:%M:%S')  $message" >> $LOGFILE

function clientsOnline() {
    typeset flag_online=$FALSE
    for client in $CLIENTS
        if ping -c 1 $client 1>/dev/null 2>/dev/null
            #log "Client $client is online."
            #log "Client $client is offline."

    return $flag_online                                                                                                  

function processRunning() {
    typeset process_flag=$FALSE                                                                                          
    for process in $PROCESSES                                                                                            
        if ps -e | grep -qs $process                                                                                     
            #log "Process $process is running."                                                                          
            #log "Process $process is not running."

    return $process_flag

function resetShutdownCounter() {
    echo "0" > $CHECK_COUNT_FILE                                                                                         

function getShutdownCount() {
    if [ -r $CHECK_COUNT_FILE ]
        cat $CHECK_COUNT_FILE | head -n 1
        echo 0

function incrementShutdownCounter() {
    echo $(expr $(getShutdownCount) + 1) > $CHECK_COUNT_FILE

if [ $(id -u) -ne 0 ]
    echo "This script must be run as root user." >&2
    exit 1

#log "### Starting ###"

if clientsOnline
    #log "At least one client is online. Reseting shutdown count."
elif processRunning
    #log "At least one of the registered processes is running. Reseting shutdown count."
    log "No registered client online. Shutdown counter incremented. Current value: $(getShutdownCount)"

    if [ $(getShutdownCount) -ge $CHECK_THRESHOLD ]
        log "Shutdown count threshold reached. Shutting down system in 10 seconds."
        rm -f $CHECK_COUNT_FILE
        /sbin/shutdown -h 1

All you have to do is to run this script from your crontab every 5 minutes. Then it would shutdown your computer in case the shutdown conditions are fulfilled for 15 minutes in a row.

share|improve this answer
Cheers Yaba, Very useful example script; general enough for me to simply modify as needed. Thanks – Ashimema Jan 19 '11 at 21:51
Only just got round to playing with this... In your script where do the "clients" actually come from? It's probably a basic Linux question, but where's the link between the friendly "Client" name you use here and the client machines physical address (IP)? – Ashimema Feb 9 '11 at 16:04
@Ashimema... that's a simple host name resolution through DNS or /etc/hosts. You could also enter an IP address instead of the host name. Basically the command 'ping -c 1 $client' must succeed in case the client is online. – Yaba Feb 9 '11 at 21:56

Actually, that's quite simple.

To power off your Linux machine you only have to execute a '/sbin/telinit 6' (as root!) from the command line or a script. This shuts down all processes in an orderly fashion and powers off through the BIOS. Note that this not work all motherboards, but in 99% of the cases it does.

There are many ways to automate this... I don't know of any automated packages, but it's not difficult to create one it yourself. I'm assuming you are using a server and a desktop/laptop to work on. If, for example you want your Linux system to power down automatically after you shut down your Windows desktop, you could write a script that pings your Windows machine every 5 minutes. If that fails 3 times in a row, shut down the machine. Another possibility is a webpage, only accessible from you local lan that initiates a (delayed) shutdown; you just make sure that page gets called on Windows shutdown. Etcetera...

share|improve this answer
Thanks JvO, that's a pretty useful answer. You've helped me clarify that a pre-packaged tool doesn't appear to exist yet, and come up with an excellent idea for where I could start to create a script to accomplish it (using the pinging of machines that need monitoring on the network) It's obvious now I think about it. Cheers – Ashimema Dec 31 '10 at 16:09

As for shutting down at a specific time, you can do it pretty easily by putting an entry in /etc/crontab

30 2 * * * root /sbin/shutdown -h 0

That will shutdown the system at 2:30am every day.

Some BIOSes let you setup the system to power on at a specific time, that's another option besides wake-on lan.

share|improve this answer
Cheers deltaray, I've used crontab before for similar, but was hoping to find a tool to do a number of monitoring events similar to the one mentioned for whs. Lights out monitors a "calendar" much like crontab would in this instant, but it also monitors whether client computers are turned on or not and using therefore using the server, whether there's an active backup taking place or due to start, whether the server is undergoing any self maintenance (I'm looking at using greyhole storage pooling, so in Linux this would be the drive balancing regimes) – Ashimema Dec 31 '10 at 16:14

Another mechanism (to add to others' responses) is if you are using Gnome: {suspend | shutdown | hibernate | reboot}

It appears to use DBUS. I don't know how useful that will be if you plan on running a server w/out Gnome though.

share|improve this answer
Looks like this isn't generally found in newer distro's? – Ashimema Feb 9 '11 at 17:40
@Ashimema: you're right, sorry. I haven't upgraded my distro for ~ 2 years now. You may have already seen this, but I found a way to do this with dbus-send directly. In fact, my looks like a wrapper (with a few differences) around the solution presented in that link. – Not Sure Feb 20 '11 at 0:12

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.