mirror of https://github.com/lukechilds/umbrel.git
Browse Source
* Related: https://github.com/getumbrel/umbrel-manager/pull/21 * Related: https://github.com/getumbrel/umbrel-dashboard/pull/130 * Add signal watcher system with power cycle triggers * Stop docker containers before system shutdown * karen * Run karen triggers async * Allow specifying an event dir * Check root_der exists * Add space * Check dependencies * Make sure karen is run as root * Make karen more kareny * Mount signals dir from umbrel-manager on hostfix-gitkeep-name
5 changed files with 64 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
set -euo pipefail |
||||
|
|
||||
|
docker-compose stop |
||||
|
shutdown -r now |
@ -0,0 +1,5 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
set -euo pipefail |
||||
|
|
||||
|
docker-compose stop |
||||
|
shutdown -h now |
@ -0,0 +1,53 @@ |
|||||
|
#!/usr/bin/env bash |
||||
|
|
||||
|
# karen watches for signals and executes triggers in the events dir |
||||
|
# karen gets triggered a lot |
||||
|
|
||||
|
check_dependencies () { |
||||
|
for cmd in "$@"; do |
||||
|
if ! command -v $cmd >/dev/null 2>&1; then |
||||
|
echo "This script requires \"${cmd}\" to be installed" |
||||
|
exit 1 |
||||
|
fi |
||||
|
done |
||||
|
} |
||||
|
|
||||
|
check_root () { |
||||
|
if [[ $UID != 0 ]]; then |
||||
|
echo "Error: This script must be run as root." |
||||
|
echo "Can I speak to a manager please?" |
||||
|
exit 1 |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
check_dependencies fswatch readlink dirname |
||||
|
|
||||
|
check_root |
||||
|
|
||||
|
if [[ -n "$1" ]]; then |
||||
|
root_dir="$(readlink -f $1)" |
||||
|
else |
||||
|
root_dir="$(dirname $(readlink -f ${BASH_SOURCE[0]}))/events" |
||||
|
fi |
||||
|
signal_dir="$root_dir/signals" |
||||
|
trigger_dir="$root_dir/triggers" |
||||
|
|
||||
|
if [[ ! -d "$root_dir" ]]; then |
||||
|
echo "Root dir does not exist '$root_dir'" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
echo "karen is running in $root_dir" |
||||
|
fswatch -0 --event=PlatformSpecific $signal_dir | while read -d "" event; do |
||||
|
signal="${event#"$signal_dir"}" |
||||
|
signal="${signal#"/"}" |
||||
|
trigger="$trigger_dir/$signal" |
||||
|
|
||||
|
echo "Got signal: $signal" |
||||
|
if test -x "$trigger"; then |
||||
|
echo "karen is getting triggered!" |
||||
|
"$trigger" & |
||||
|
else |
||||
|
echo "No trigger found" |
||||
|
fi |
||||
|
done |
Loading…
Reference in new issue