Command line for safely shutting down unraid server


Wilkie

Recommended Posts

Hello, what command should I be using to shutdown unraid? I have looked at /sbin/poweroff but unraid documentation says it is not sufficient or deprecated. Should I be using shutdown -f ? Does it safely shutdown unraid?

 

To elaborate my UPS doesn't play nicely with unraid and loses USB connection every few minutes which causes it to not shutdown properly with APC or NUT. As a workaround I'm writing a script that pings a few devices every minute on my network and if successful pings aren't received for 10min or so, then run a shutdown command for unraid to shutdown in the event of a power failure.

 

Thanks for any input.

Link to comment
  • 1 year later...
On 2/16/2022 at 2:26 PM, Wilkie said:

As a workaround I'm writing a script that pings a few devices every minute on my network and if successful pings aren't received for 10min or so, then run a shutdown command for unraid to shutdown in the event of a power failure.

 

 

Would it be possible to share this script? I am looking for something like that, but don't want to develop it frm scratch...

Link to comment

Sure, I don't really use it anymore as I found 6.12 to resolve lots of my UPS issues. It currently pings 3 different devices and if it can't successfully ping the devices for about 10 minutes then unraid shuts down. Please adjust according to your needs.

 

#!/bin/bash

i=0
while true;
do

  #computer 1
  ping -c 1 10.0.1.1
  if [ $? -eq 0 ]
  then 
    i=0 #Pass
    echo '10.0.1.1 Pass i='$i
  else
    ((i++)) #Fail
    echo '10.0.1.1 Fail i='$i
  fi
  sleep 60
  
  #computer 2
  ping -c 1 10.0.1.5
  if [ $? -eq 0 ]
  then 
    i=0 #Pass
    echo '10.0.1.5 Pass i='$i
  else
    ((i++)) #Fail
    echo '10.0.1.5 Fail i='$i
  fi
  sleep 60
  
  #computer 3
  ping -c 1 8.8.8.8
  if [ $? -eq 0 ]
  then 
    i=0 #Pass
    echo '8.8.8.8 Pass i='$i
  else
    ((i++)) #Fail
    echo '8.8.8.8 Fail i='$i
  fi
  sleep 60

  if [ $i -gt 10 ]
  then
    /sbin/powerdown
  fi
    
done

 

Edited by Wilkie
Link to comment
9 minutes ago, Wilkie said:

Sure, I don't really use it anymore as I found 6.12 to resolve lots of my UPS issues. It currently pings 3 different devices and if it can't successfully ping the devices for about 10 minutes then unraid shuts down. Please adjust according to your needs.

 

 

Nice and simple. Thanks!

Link to comment

Just make sure that your router and the local computers you use are not on UPS's as this will add that time onto the time that your Unraid UPS has to supply power.   (You always want to make sure that your Unraid UPS battery can last through two full shutdown sequences.  (It can take between eight and twenty-four hours to fully recharge a UPS battery...)

 

You might also consider pinging always-on devices like Roku boxes...

Edited by Frank1940
Link to comment
  • 4 months later...
  • 1 month later...

I stumbled across this entirely by accident looking for the proper shutdown command but came up with the same idea you did. I installed a cheap UPS for a customer to prevent their server from shutting down abruptly as it killed 1 drive already. Here's the code that I used chatgpt to help make, instead of pinging a device on the network I have it ping the gateway itself which works out perfectly here since their network isn't on a battery backup. If you want to use this replace the IP with your gateway and desired timings.

#!/bin/bash

while true; do
    printf "%s" "Checking local LAN gateway @ 192.168.86.1..."

    if ping -c 1 -n -w 1 192.168.86.1 &> /dev/null; then
        printf "\n%s"  "gateway is responding"
    else
        printf "\n\n------------------------------------------------------------------------"
        printf "\n%s" "gateway is not responding, waiting 5 minutes before checking again..."
        printf "\n------------------------------------------------------------------------\n"

        # Wait for 5 minutes before checking again
        sleep 300

        printf "\n%s\n" "Rechecking gateway..."
        if ping -c 1 -n -w 1 192.168.86.1 &> /dev/null; then
            printf "\n------------------------------------------------------------------------"
            printf "\n%s"  "Gateway is now responding, shutdown avoided..."
            printf "\n------------------------------------------------------------------------\n"
        else
            printf "\n------------------------------------------------------------------------"
            printf "\n%s" "Gateway is still not responding after 5 minutes, shutting down..."
            printf "\n------------------------------------------------------------------------\n"
            powerdown
            exit 1
        fi
    fi

    # If the loop reaches here, it means the IP is now responding
    printf "\n%s\n\n" "Checking again in 30 seconds..."
    sleep 30
done

I also formatted it so in the logs it looks nice and pretty with good spacing for at a glance troubleshooting.

Edited by Coastal Custom Tech
Link to comment
5 hours ago, Coastal Custom Tech said:

Here's the code that I used

Make sure you document how to stop the script from running at startup or kill it when desired, as this would make a future technician absolutely batty trying to figure out why the stupid server keeps shutting itself down for no reason. I know you said you made sure it logs the activity, but if there is a network change, or any other circumstance keeps that IP from responding to a ping... 

 

You can see where this could be very bad.

 

If it were me, I might go so far as to only do the shutdown if the gateway was unresponsive, AND a canary file was readable with the correct content on one of the array drives. That way if the array isn't started, or that file is deleted, the server will stay running. Maybe name the canary file POWERFAILSHUTDOWN or something, so the next guy intuitively knows it may be involved in an unplanned shutdown.

  • Upvote 1
Link to comment
5 hours ago, JonathanM said:

Make sure you document

For this client specifically it’s just me catering to them but I do have documentation on how I set them up incase I need to look back long term. I made a more advanced version that is also outputting the errors to a file on the array so it can be reviewed long term. 
 

For the most part the issues they had was brownouts with the power, or they would trip the break as it shared outlets outside the house that would have power tools on. Since it’s for a small construction company that their house is their office it’s a pretty great solution that covers %99 of their needs. 
 

For a bigger customer I would do a bit more and will probably figure out how to make it notify (if a specific device went off that should be on, for the network being on backup), giving a pop on next login, and disabling after a full shutdown to prevent re-accruing shutdowns without intervention first. 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.