aboutsummaryrefslogtreecommitdiff
path: root/net/frp/files/frpc.init
diff options
context:
space:
mode:
Diffstat (limited to 'net/frp/files/frpc.init')
-rw-r--r--net/frp/files/frpc.init70
1 files changed, 63 insertions, 7 deletions
diff --git a/net/frp/files/frpc.init b/net/frp/files/frpc.init
index 38c2e182c..96208d8f1 100644
--- a/net/frp/files/frpc.init
+++ b/net/frp/files/frpc.init
@@ -3,14 +3,70 @@
START=99
USE_PROCD=1
+NAME=frpc
+PROG=/usr/bin/$NAME
+
+_err() {
+ echo "$*" >&2
+ logger -p daemon.err -t "$NAME" "$*"
+}
+
+config_cb() {
+ [ $# -eq 0 ] && return
+
+ local type="$1"
+ local name="$2"
+ if [ "$type" = "conf" ]; then
+ echo "[$name]" >> "$conf_file"
+ option_cb() {
+ local option="$1"
+ local value="$2"
+ echo "$option = $value" >> "$conf_file"
+ }
+ list_cb() {
+ local name="$1"
+ local value="$2"
+ [ "$name" = "_" ] && echo "$value" >> "$conf_file"
+ }
+ else
+ [ "$type" = "init" ] && init_cfg="$name"
+ option_cb() { return 0; }
+ list_cb() { return 0; }
+ fi
+}
+
start_service() {
+ local init_cfg=" "
+ local conf_file="/var/etc/$NAME.ini"
+
+ > "$conf_file"
+ config_load "$NAME"
+
+ local stdout stderr user group respawn env conf_inc
+ uci_validate_section "$NAME" init "$init_cfg" \
+ 'stdout:bool:1' \
+ 'stderr:bool:1' \
+ 'user:string' \
+ 'group:string' \
+ 'respawn:bool:1' \
+ 'env:list(string)' \
+ 'conf_inc:list(string)'
+
+ local err=$?
+ [ $err -ne 0 ] && {
+ _err "uci_validate_section returned $err"
+ return 1
+ }
+
+ [ -n "$conf_inc" ] && config_list_foreach "$init_cfg" conf_inc cat >> "$conf_file"
+
procd_open_instance
- procd_set_param command /usr/bin/frpc -c /etc/frp/frpc.ini
- procd_set_param file /etc/frp/frpc.ini
- procd_set_param stdout 1
- procd_set_param stderr 1
- procd_set_param user nobody
- procd_set_param group nogroup
- procd_set_param respawn
+ procd_set_param command "$PROG" -c "$conf_file"
+ procd_set_param stdout $stdout
+ procd_set_param stderr $stderr
+ [ -n "$user" ] && procd_set_param user "$user"
+ [ -n "$group" ] && procd_set_param group "$group"
+ [ $respawn -eq 1 ] && procd_set_param respawn
+ [ -n "$env" ] && config_list_foreach "$init_cfg" env "procd_append_param env"
procd_close_instance
}