Files
op-packages/meow/files/meow.init
T

74 lines
2.1 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
# procd init script for meow-rs.
# Service settings live in /etc/config/meow (UCI); the proxy configuration
# itself is the regular meow YAML file (default /etc/meow/config.yaml).
USE_PROCD=1
START=95
STOP=10
PROG=/usr/bin/meow
GATEWAY=/usr/share/meow/gateway.sh
start_service() {
local enabled config_file work_dir panel_port secret tproxy controller
config_load meow
config_get_bool enabled main enabled 0
config_get config_file main config_file /etc/meow/config.yaml
config_get work_dir main work_dir /etc/meow
config_get panel_port main panel_port 9090
config_get secret main secret ''
config_get_bool tproxy tproxy enabled 0
[ "$enabled" -eq 1 ] || return 0
[ "$config_file" = /etc/meow/config.yaml ] && [ "$work_dir" = /etc/meow ] || {
logger -t meow 'managed service requires /etc/meow/config.yaml and work_dir /etc/meow'
return 1
}
if ! "$PROG" --no-external-plugins -d "$work_dir" -f "$config_file" -t >/dev/null 2>&1; then
logger -t meow "config test failed for $config_file, not starting"
return 1
fi
controller="127.0.0.1:$panel_port"
[ -z "$secret" ] || controller="0.0.0.0:$panel_port"
procd_open_instance meow
procd_set_param command "$PROG" --no-external-plugins -d "$work_dir" -f "$config_file" \
--ext-ctl "$controller"
[ -n "$secret" ] && procd_append_param command --secret "$secret"
# Restart when either the UCI service settings or the YAML config change.
procd_set_param file /etc/config/meow "$config_file"
procd_set_param respawn 3600 5 5
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param limits nofile="1000000 1000000"
procd_close_instance
if [ "$tproxy" -eq 1 ]; then
# A supervised instance owns the wait and rules, including teardown.
procd_open_instance gateway
procd_set_param command "$GATEWAY" run
procd_set_param term_timeout 5
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
else
"$GATEWAY" down
fi
}
stop_service() {
"$GATEWAY" down
}
service_triggers() {
procd_add_reload_trigger "meow"
}
reload_service() {
stop
start
}