#!/bin/sh /etc/rc.common # Copyright (C) 2023 Tianling Shen USE_PROCD=1 START=99 extra_command "hot_reload" "Hot-reload service" CONF="dae" PROG="/usr/bin/dae" LOG_DIR="/var/log/dae" start_service() { config_load "$CONF" local enabled config_get_bool enabled "config" "enabled" "0" [ "$enabled" -eq "1" ] || return 1 local config_file config_get config_file "config" "config_file" "/etc/dae/config.dae" "$PROG" validate -c "$config_file" || return 1 local log_maxbackups log_maxsize config_get log_maxbackups "config" "log_maxbackups" "1" config_get log_maxsize "config" "log_maxsize" "1" procd_open_instance "$CONF" procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" procd_set_param command "$PROG" run procd_append_param command --config "$config_file" procd_append_param command --disable-timestamp procd_append_param command --logfile "$LOG_DIR/dae.log" procd_append_param command --logfile-maxbackups "$log_maxbackups" procd_append_param command --logfile-maxsize "$log_maxsize" procd_set_param limits core="unlimited" procd_set_param limits nofile="1000000 1000000" procd_set_param respawn # procd_set_param stdout 1 procd_set_param stderr 1 procd_close_instance } stop_service() { rm -rf "$LOG_DIR" # kill lingering procs in daens: TERM first, then KILL for stubborn ones for pid in $(ip netns pids daens 2>/dev/null); do kill "$pid" 2>/dev/null; done if [ -n "$(ip netns pids daens 2>/dev/null)" ]; then sleep 1 for pid in $(ip netns pids daens 2>/dev/null); do kill -9 "$pid" 2>/dev/null; done fi # cleanup daens netns; ip-full needed for netns, busybox fallback via umount if ! ip netns del daens 2>/dev/null; then umount /run/netns/daens 2>/dev/null rm -f /run/netns/daens fi # clean orphaned dae0 ip link del dae0 2>/dev/null || true } service_triggers() { procd_add_reload_trigger "$CONF" } hot_reload() { /etc/init.d/dae running && "$PROG" reload "$(cat /var/run/dae.pid)" } reload_service() { restart }