From 0f712fd69f8464aa3225208e3b7b56f454fed00c Mon Sep 17 00:00:00 2001 From: juewuy Date: Sun, 19 Apr 2026 12:06:28 +0800 Subject: [PATCH] =?UTF-8?q?~=E5=B0=86=E8=87=AA=E5=8A=A8=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E5=88=B0$CRASHDIR/configs/task=E7=9B=AE=E5=BD=95=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/init.sh | 11 ++++++++ scripts/libs/get_config.sh | 1 + scripts/libs/set_cron.sh | 4 ++- scripts/menus/5_task.sh | 47 ++++++++++++++++++---------------- scripts/menus/task_cmd.sh | 5 ++-- scripts/starts/afstart.sh | 12 ++++----- scripts/starts/bfstart.sh | 3 +-- scripts/starts/fw_getlanip.sh | 2 +- scripts/starts/general_init.sh | 1 + 9 files changed, 52 insertions(+), 34 deletions(-) diff --git a/scripts/init.sh b/scripts/init.sh index 3b76777f..45c0603a 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -22,8 +22,10 @@ grep -qE '/(docker|lxc|kubepods|crio|containerd)/' /proc/1/cgroup 2>/dev/null || [ "$systype" = 'container' ] && CRASHDIR='/etc/ShellCrash' [ -z "$CRASHDIR" ] && [ -n "$clashdir" ] && CRASHDIR="$clashdir" [ -z "$CRASHDIR" ] && [ -d /tmp/SC_tmp ] && . /tmp/SC_tmp/menus/set_crashdir.sh && set_crashdir +TASKCFGDIR="$CRASHDIR"/configs/task #移动文件 mkdir -p "$CRASHDIR" +mkdir -p "$TASKCFGDIR" rm -rf /tmp/SC_tmp/menus/set_crashdir.sh mv -f /tmp/SC_tmp/* "$CRASHDIR" 2>/dev/null ############################## @@ -190,6 +192,15 @@ done for file in fake_ip_filter mac web_save servers_chs.list servers_en.list fake_ip_filter.list singbox_providers.list clash_providers.list; do mv -f "$CRASHDIR"/"$file" "$CRASHDIR"/configs/"$file" 2>/dev/null done +#迁移任务状态文件到新目录 +for file in cron bfstart afstart running affirewall task.user; do + mv -f "$CRASHDIR"/"$file" "$TASKCFGDIR"/"$file" 2>/dev/null + mv -f "$CRASHDIR"/task/"$file" "$TASKCFGDIR"/"$file" 2>/dev/null +done +#修正旧版防火墙注入路径 +for file in /etc/init.d/firewall /etc/init.d/firewall.bak; do + [ -f "$file" ] && sed -i "s#$CRASHDIR/task/affirewall#$TASKCFGDIR/affirewall#g" "$file" 2>/dev/null +done #配置文件改名 mv -f "$CRASHDIR"/configs/ShellClash.cfg "$CFG_PATH" 2>/dev/null #数据库改名 diff --git a/scripts/libs/get_config.sh b/scripts/libs/get_config.sh index 8eb66a49..af3305d4 100644 --- a/scripts/libs/get_config.sh +++ b/scripts/libs/get_config.sh @@ -1,5 +1,6 @@ # 检查配置文件 +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task [ -f "$CRASHDIR"/configs/ShellCrash.cfg ] || . "$CRASHDIR"/init.sh >/dev/null 2>&1 . "$CRASHDIR"/configs/command.env >/dev/null 2>&1 . "$CRASHDIR"/configs/ShellCrash.cfg diff --git a/scripts/libs/set_cron.sh b/scripts/libs/set_cron.sh index 29bd8c7e..872166a1 100644 --- a/scripts/libs/set_cron.sh +++ b/scripts/libs/set_cron.sh @@ -4,6 +4,7 @@ crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}'| tr - [ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs" [ ! -w "$crondir" ] && crondir="/var/spool/cron" [ -z "$USER" ] && USER=$(whoami 2>/dev/null) +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task tmpcron=/tmp/cron_tmp touch "$tmpcron" @@ -32,7 +33,8 @@ cronset() { #定时任务设置 cronadd "$tmpcron" #华硕/Padavan固件存档在本地,其他则删除 if [ -d /jffs ] || [ -d /etc/storage/ShellCrash ];then - mv -f "$tmpcron" "$CRASHDIR"/task/cron + mkdir -p "$TASKCFGDIR" + mv -f "$tmpcron" "$TASKCFGDIR"/cron else rm -f "$tmpcron" fi diff --git a/scripts/menus/5_task.sh b/scripts/menus/5_task.sh index a1bda8af..5fb7f363 100644 --- a/scripts/menus/5_task.sh +++ b/scripts/menus/5_task.sh @@ -7,6 +7,7 @@ __IS_MODULE_5_TASK_LOADED=1 # 通用工具 . "$CRASHDIR"/libs/set_config.sh . "$CRASHDIR"/libs/set_cron.sh +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task load_lang 5_task @@ -32,7 +33,8 @@ set_cron() { set_service() { # 参数1代表要任务类型,参数2代表任务ID,参数3代表任务描述,参数4代表running任务cron时间 - task_file="$CRASHDIR"/task/$1 + mkdir -p "$TASKCFGDIR" + task_file="$TASKCFGDIR"/$1 [ -s "$task_file" ] && sed -i "/$3/d" "$task_file" # 运行时每分钟执行的任务特殊处理 if [ "$1" = "running" ]; then @@ -53,7 +55,7 @@ task_user_add() { while true; do comp_box "\033[33m$TASK5_USER_ADD_HINT1\033[0m" \ "\033[36m$TASK5_USER_ADD_HINT2\033[0m" \ - "$TASK5_USER_ADD_HINT3\033[32m${CRASHDIR}/task/task.user\033[0m$TASK5_USER_ADD_HINT4" + "$TASK5_USER_ADD_HINT3\033[32m${TASKCFGDIR}/task.user\033[0m$TASK5_USER_ADD_HINT4" btm_box "\033[36m$TASK5_INPUT_CMD\033[0m" \ "$TASK5_OR_BACK" read -r -p "$TASK5_INPUT> " script @@ -63,12 +65,12 @@ task_user_add() { task_command=$script comp_box "$TASK5_CHECK_INPUT\033[32m$task_command\033[0m" # 获取本任务ID - task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1) + task_max_id=$(awk -F '#' '{print $1}' "$TASKCFGDIR"/task.user 2>/dev/null | sort -n | tail -n 1) [ -z "$task_max_id" ] && task_max_id=200 task_id=$((task_max_id + 1)) read -r -p "$TASK5_INPUT_REMARK> " txt [ -n "$txt" ] && task_name=$txt || task_name="$TASK5_CUSTOM_TASK$task_id" - echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user + echo "$task_id#$task_command#$task_name" >>"$TASKCFGDIR"/task.user msg_alert "\033[32m$TASK5_CUSTOM_ADDED\033[0m" break else @@ -80,10 +82,10 @@ task_user_add() { # 自定义命令删除 task_user_del() { while true; do - if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then + if grep -Evq '^#' "$TASKCFGDIR/task.user" 2>/dev/null; then comp_box "$TASK5_USER_DEL_HINT1" \ - "$TASK5_USER_DEL_HINT2\033[32m${CRASHDIR}/task/task.user\033[0m" - grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null | + "$TASK5_USER_DEL_HINT2\033[32m${TASKCFGDIR}/task.user\033[0m" + grep -Ev '^#' "$TASKCFGDIR/task.user" 2>/dev/null | awk -F '#' '{print $1") "$3}' | while IFS= read -r line; do content_line "$line" @@ -94,7 +96,7 @@ task_user_del() { if [ "$num" = 0 ]; then break elif [ -n "$num" ]; then - sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null + sed -i "/^$num#/d" "$TASKCFGDIR"/task.user 2>/dev/null common_success else msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m" @@ -111,7 +113,7 @@ task_add() { while true; do comp_box "\033[36m$TASK5_SELECT_ADD\033[0m" # 输出任务列表 - list=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}') + list=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}') list_box "$list" btm_box "" \ "0) $COMMON_BACK" @@ -122,8 +124,8 @@ task_add() { ;; [1-9] | [1-9][0-9]) if [ "$num" -le "$(echo "$list" | wc -l)" ]; then - task_id=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}') - task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}') + task_id=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $1}') + task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep -Ev '^(#|$)' | sed -n "$num p" | awk -F '#' '{print $3}') task_type break else @@ -142,11 +144,11 @@ task_del() { # 删除定时任务 cronset "$1" # 删除条件任务 - sed -i "/$1/d" "$CRASHDIR"/task/cron 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/bfstart 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/afstart 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/running 2>/dev/null - sed -i "/$1/d" "$CRASHDIR"/task/affirewall 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/cron 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/bfstart 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/afstart 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/running 2>/dev/null + sed -i "/$1/d" "$TASKCFGDIR"/affirewall 2>/dev/null } # 任务条件选择菜单 @@ -244,8 +246,8 @@ task_manager() { while true; do # 抽取并生成临时列表 cronload >"$TMPDIR"/task_cronlist - cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list - cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list + cat "$TMPDIR"/task_cronlist "$TASKCFGDIR"/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list + cat "$TASKCFGDIR"/bfstart "$TASKCFGDIR"/afstart "$TASKCFGDIR"/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "$TASK5_GUARD_WORD" | awk -F '#' '{print "0 '$TASK5_OLD_PREFIX'"$2}' >>"$TMPDIR"/task_list sed -i '/^ *$/d' "$TMPDIR"/task_list rm -rf "$TMPDIR"/task_cronlist @@ -286,13 +288,13 @@ task_manager() { if [ "$res" = 1 ]; then cronname=$(echo "$task_txt" | awk -F '-' '{print $2}') cronset "$cronname" - sed -i "/$cronname/d" "$CRASHDIR"/task/cron 2>/dev/null + sed -i "/$cronname/d" "$TASKCFGDIR"/cron 2>/dev/null break fi else task_des=$(echo "$task_txt" | awk '{print $2}') - task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') + task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}') comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m" btm_box "1) $TASK5_EDIT_TASK" \ "2) $TASK5_DEL_TASK" \ @@ -313,7 +315,7 @@ task_manager() { common_success ;; 3) - task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') + task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}') eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL" msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des】$task_res\033[0m" ;; @@ -367,7 +369,8 @@ task_recom() { task_menu() { while true; do # 检测并创建自定义任务文件 - [ -f "$CRASHDIR"/task/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$CRASHDIR"/task/task.user + mkdir -p "$TASKCFGDIR" + [ -f "$TASKCFGDIR"/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$TASKCFGDIR"/task.user comp_box "\033[30;47m$TASK5_MENU_TITLE\033[0m" btm_box "1) $TASK5_MENU_1" \ "2) $TASK5_MENU_2" \ diff --git a/scripts/menus/task_cmd.sh b/scripts/menus/task_cmd.sh index 719b2173..026eae86 100644 --- a/scripts/menus/task_cmd.sh +++ b/scripts/menus/task_cmd.sh @@ -10,6 +10,7 @@ . "$CRASHDIR"/libs/web_get_bin.sh . "$CRASHDIR"/libs/logger.sh . "$CRASHDIR"/libs/i18n.sh +[ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task load_lang task_cmd @@ -140,8 +141,8 @@ hotupdate() { #热更新订阅 case "$1" in [1-9][0-9][0-9]) - task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}') - task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}') + task_command=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}') + task_name=$(cat "$CRASHDIR"/task/task_${i18n}.list "$TASKCFGDIR"/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}') #task_logger "任务$task_name 开始执行" eval $task_command && task_res="$TASK_CMD_RES_OK" || task_res="$TASK_CMD_RES_FAIL" task_logger "$TASK_CMD_EXEC_PREFIX$2$TASK_CMD_EXEC_MID$task_res" diff --git a/scripts/starts/afstart.sh b/scripts/starts/afstart.sh index 93455759..d798a517 100644 --- a/scripts/starts/afstart.sh +++ b/scripts/starts/afstart.sh @@ -38,21 +38,21 @@ if [ -n "$test" -o -n "$(pidof CrashCore)" ]; then ckcmd mtd_storage.sh && mtd_storage.sh save >/dev/null 2>&1 #Padavan保存/etc/storage #加载定时任务 cronload | grep -v '^$' >"$TMPDIR"/cron_tmp - [ -s "$CRASHDIR"/task/cron ] && cat "$CRASHDIR"/task/cron >>"$TMPDIR"/cron_tmp - [ -s "$CRASHDIR"/task/running ] && cat "$CRASHDIR"/task/running >>"$TMPDIR"/cron_tmp + [ -s "$TASKCFGDIR"/cron ] && cat "$TASKCFGDIR"/cron >>"$TMPDIR"/cron_tmp + [ -s "$TASKCFGDIR"/running ] && cat "$TASKCFGDIR"/running >>"$TMPDIR"/cron_tmp [ "$bot_tg_service" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程" >>"$TMPDIR"/cron_tmp [ "$start_old" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh shellcrash #ShellCrash保守模式守护进程" >>"$TMPDIR"/cron_tmp awk '!x[$0]++' "$TMPDIR"/cron_tmp >"$TMPDIR"/cron_tmp2 #删除重复行 cronadd "$TMPDIR"/cron_tmp2 rm -f "$TMPDIR"/cron_tmp "$TMPDIR"/cron_tmp2 #加载条件任务 - [ -s "$CRASHDIR"/task/afstart ] && { . "$CRASHDIR"/task/afstart; } & - [ -s "$CRASHDIR"/task/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && { + [ -s "$TASKCFGDIR"/afstart ] && { . "$TASKCFGDIR"/afstart; } & + [ -s "$TASKCFGDIR"/affirewall -a -s /etc/init.d/firewall -a ! -f /etc/init.d/firewall.bak ] && { #注入防火墙 line=$(grep -En "fw.* restart" /etc/init.d/firewall | cut -d ":" -f 1) - sed -i.bak "${line}a\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall + sed -i.bak "${line}a\\. $TASKCFGDIR/affirewall" /etc/init.d/firewall line=$(grep -En "fw.* start" /etc/init.d/firewall | cut -d ":" -f 1) - sed -i "${line}a\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall + sed -i "${line}a\\. $TASKCFGDIR/affirewall" /etc/init.d/firewall } & exit 0 else diff --git a/scripts/starts/bfstart.sh b/scripts/starts/bfstart.sh index 7facdd59..ce8450f8 100644 --- a/scripts/starts/bfstart.sh +++ b/scripts/starts/bfstart.sh @@ -79,7 +79,7 @@ EOF [ ! -d "$BINDIR"/ui ] && mkdir -p "$BINDIR"/ui [ -z "$crashcore" ] && crashcore=meta #执行条件任务 -[ -s "$CRASHDIR"/task/bfstart ] && . "$CRASHDIR"/task/bfstart +[ -s "$TASKCFGDIR"/bfstart ] && . "$TASKCFGDIR"/bfstart #检查内核配置文件 if [ ! -f "$core_config" ]; then if [ -n "$Url" -o -n "$Https" ]; then @@ -144,4 +144,3 @@ fi rm -rf /tmp/ShellCrash/debug.log rm -rf "$CRASHDIR"/debug.log exit 0 - diff --git a/scripts/starts/fw_getlanip.sh b/scripts/starts/fw_getlanip.sh index 2e3cb0be..5404cdd9 100644 --- a/scripts/starts/fw_getlanip.sh +++ b/scripts/starts/fw_getlanip.sh @@ -11,7 +11,7 @@ getlanip() { #获取局域网host地址 ip -6 addr show dev $iface 2>/dev/null done | grep 'scope global' | awk '{print $2}' | tr '\n' ' ' | sed 's/ $//' ) - [ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//') + [ -z "$host_ipv6" ] && host_ipv6=$(ip -6 route show | grep -Ev 'default|unreachable|fe80::/|wan|ppp|utun|iot|peer|docker|podman|virbr|vnet|ovs|vmbr|veth|vmnic|vboxnet|lxcbr|xenbr|vEthernet|multicast|anycast' | awk '{print $1}' | tr '\n' ' ' | sed 's/ $//') } [ -f "$TMPDIR"/ShellCrash.log ] && break [ -n "$host_ipv4" -a "$ipv6_redir" != "ON" ] && break diff --git a/scripts/starts/general_init.sh b/scripts/starts/general_init.sh index 38228304..d19efd6d 100644 --- a/scripts/starts/general_init.sh +++ b/scripts/starts/general_init.sh @@ -3,6 +3,7 @@ #初始化目录 [ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd) +TASKCFGDIR="$CRASHDIR"/configs/task profile=/etc/profile . "$CRASHDIR"/libs/set_profile.sh . "$CRASHDIR"/libs/set_cron.sh