Reddit refuge, escentric engineer and serial hobbyist.
In case anyone cares here is my script, I use this for backups or shutting down the server.
#!/bin/bash
logger "Stopping Docker compose services"
services=(/home/user/docker/*) # This creates an array of the full paths to all subdirs
#the last entry in this array is always blank line, hence the minus 1 in the for loop count below
for ((i=0; i<=(${#services[@]}-1); i++))
do
docker compose -f ${services[i]}/docker-compose.yml down &
done
#wait for all the background commands to finish
wait
I have a folder that all my docker services are in. Inside the folder is a folder for each discrete service and within that folder is a unique compose file necessary to run the service. Also in the folder is all the storage folders for that service so it’s completely portable, move the folder to any server and run it and you’re golden. I shut down all the services with a script then I can just tar the whole docker folder and every service and its data is backed up and portable.
Sorry, I forgot to post the scripts. I’m a meathead electrical engineer so I don’t use GIT or anything so here is the code dump. To summarize the setup’s software:
The backup script is fairly boring, just runs rsync and pushes the rsync log files back to the primary server. If it fails it sends me an email before turning the ethernet back off and going black.
#So here is my python code that runs the button press:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import subprocess
import time
from multiprocessing import Process
#when this script first runs, at boot, disable ethernet
time.sleep(5) #wait 5 seconds for system to boot, then try and disable ethernet.
subprocess.call(['/home/pi/ethernet_updown.sh'], shell=False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.OUT) #controls TFT display backlight
GPIO.setup(23, GPIO.IN) #pull up or down is optional, the TFT display buttons have a hardware 10k pull up. Measure low tranisitions
GPIO.setup(24, GPIO.IN)
#watches the button mounted above the USB port, in the Pi's case.
def case_button_watch():
while True:
GPIO.wait_for_edge(3, GPIO.FALLING)
#wait 100ms then check if its still low, debounce timer
time.sleep(.100)
if GPIO.input(3) == GPIO.LOW:
#do something as it's a button press
print('Button is pressed!')
time.sleep(.900)
if GPIO.input(3) == GPIO.LOW:
#if the button is pressed for over 1 second its a long press. Run the backup script
print('Button long press (greater than 1 second), running an unscheduled backup')
subprocess.call(['/home/pi/backup.sh'], shell=False)
else:
#the press was greater than 100mS but less than 1000mS, just toggle the ethernet
print('Button short press (less than 1 second), toggling the ethernet')
subprocess.call(['/home/pi/ethernet_updown.sh'], shell=False)
else:
#do nothing as its interference
print('GPIO3 debounce failed, it was noise')
#watches the buttons in the TFT display
def TFT_display_button1():
while True:
GPIO.wait_for_edge(23, GPIO.FALLING)
#wait 100ms then check if its still low, debounce timer
time.sleep(.100)
if GPIO.input(23) == GPIO.LOW:
#do something as it's a button press
print('Button GPIO23 is pressed!')
GPIO.output(22, GPIO.HIGH) #turn the backlight ON
else:
#do nothing as its interference
print('GPIO23 debounce failed, it was noise')
#watches the buttons in the TFT display
def TFT_display_button2():
while True:
GPIO.wait_for_edge(24, GPIO.FALLING)
#wait 100ms then check if its still low, debounce timer
time.sleep(.100)
if GPIO.input(24) == GPIO.LOW:
#do something as it's a button press
print('Button GPIO24 is pressed!')
GPIO.output(22, GPIO.LOW) #turn the backlight OFF
else:
#do nothing as its interference
print('GPIO24 debounce failed, it was noise')
if __name__ == '__main__':
#run three parallel processes to watch all three buttons with software debounce
proc1 = Process(target=case_button_watch)
proc1.start()
proc2 = Process(target=TFT_display_button1)
proc2.start()
proc3 = Process(target=TFT_display_button2)
proc3.start()
#bash script that toggles the ethernet - if its on, it turns it off. if its off, it turns it on:
#!/bin/bash
if sudo ifconfig | grep 'eth0' | grep 'RUNNING' > /dev/null;
then
wall -n "$(date +"%Y%m%d_%H%M%S"):Ethernet going down"
sudo ifconfig eth0 down
else
wall -n "$(date +"%Y%m%d_%H%M%S"):Ethernet going up"
sudo ifconfig eth0 up
fi
Does anyone see the attatched mp4 video? If not here is an imgur link.
Multi user but without unique libraries for each user. Just one big photo library for every user.