#!/bin/bash # for reboot call: sudo /home/admin/config.scripts/blitz.shutdown.sh reboot # use this script instead of direct shutdown command to: # 1) give UI the info that a reboot/shutdown is now happening # 2) shutdown/reboot in a safe way to prevent data corruption # check if sudo if [ "$EUID" -ne 0 ]; then echo "Please run as root (with sudo)" exit 1 fi source <(/home/admin/_cache.sh get network) # display info echo rpiModel=$(cat /proc/device-tree/model 2>/dev/null | tr -d '\0') if [ -n "${rpiModel}" ]; then echo "${rpiModel}" if echo ${rpiModel} | grep -Eq 'Raspberry Pi 4'; then echo "When shutdown is complete the green activity light stays dark and the LCD turns white on the ${rpiModel}." elif echo ${rpiModel} | grep -Eq 'Raspberry Pi 5'; then echo "When shutdown is complete the activity light turns red and the LCD turns white on the ${rpiModel}." fi fi if [ "$1" = "reboot" ]; then shutdownParams="-h -r now" echo "It will then reboot again automatically." /home/admin/_cache.sh set state "reboot" /home/admin/_cache.sh set message "$2" else shutdownParams="-P -h now" echo "Then wait 5 seconds and disconnect power." /home/admin/_cache.sh set state "shutdown" /home/admin/_cache.sh set message "" fi # do shutdown/reboot echo "-----------------------------------------------" sleep 3 # general services to stop servicesToStop="electrs fulcrum" for service in ${servicesToStop}; do if systemctl is-active --quiet ${service}; then echo "stopping ${service} - please wait .." timeout 120 systemctl stop ${service} fi done # lndg # stopping LNDg (if installed) isInstalled=$(sudo ls /etc/systemd/system/jobs-lndg.service 2>/dev/null | grep -c 'jobs-lndg.service') if ! [ ${isInstalled} -eq 0 ]; then echo "stop LNDg - please wait .." timeout 120 systemctl stop gunicorn.service 2>/dev/null timeout 120 systemctl stop jobs-lndg.timer 2>/dev/null timeout 120 systemctl stop jobs-lndg.service 2>/dev/null timeout 120 systemctl stop rebalancer-lndg.timer 2>/dev/null timeout 120 systemctl stop rebalancer-lndg.service 2>/dev/null timeout 120 systemctl stop htlc-stream-lndg.service 2>/dev/null fi # lightning lightningServicesToStop="lnd tlnd slnd lightningd tlightningd slightningd" for service in ${lightningServicesToStop}; do if systemctl is-active --quiet ${service}; then echo "stopping ${service} - please wait .." timeout 120 systemctl stop ${service} fi done # bitcoind if [ "${network}" != "" ]; then # stopping bitcoin (thru cli) echo "stop ${network}d (1) - please wait .." timeout 10 sudo -u bitcoin ${network}-cli stop 2>/dev/null # stopping bitcoind (thru systemd) echo "stop ${network}d (2) - please wait .." timeout 120 systemctl stop ${network}d 2>/dev/null timeout 120 systemctl stop t${network}d 2>/dev/null timeout 120 systemctl stop s${network}d 2>/dev/null sleep 3 else echo "skipping stopping layer1 (network=='' in cache)" fi # make sure drives are synced before shutdown source <(/home/admin/config.scripts/blitz.datadrive.sh status) if [ "${isBTRFS}" == "1" ] && [ "${isMounted}" == "1" ]; then echo "STARTING BTRFS RAID DATA CHECK ..." btrfs scrub start /mnt/hdd/ fi sync # unmount HDD - try to kill all processes first #3114 echo "# Killing the processes using /mnt/hdd" processesUsingDisk=$(lsof -t "/mnt/hdd") if [ -n "$processesUsingDisk" ]; then while read -r pid; do processName=$(ps -p $pid -o comm=) echo "# Stop $processName with: 'kill -SIGTERM $pid'" kill -SIGTERM $pid # Send SIGTERM signal sleep 5 # Wait for the process to terminate done <<<"$processesUsingDisk" fi echo "# Attempt to unmount /mnt/hdd" umount "/mnt/hdd" echo "starting shutdown ..." shutdown ${shutdownParams} # detect missing DBUS if [ "${DBUS_SESSION_BUS_ADDRESS}" == "" ]; then echo "WARN: Missing \$DBUS_SESSION_BUS_ADDRESS .. " if [ "$1" = "reboot" ]; then echo "RUNNING FALLBACK REBOOT .. " systemctl --force --force reboot else echo "RUNNING FALLBACK SHUTDOWN .. " systemctl --force --force poweroff fi fi exit 0