diff --git a/Dockerfile b/Dockerfile index 2b6e6362..8471cf41 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,8 +57,7 @@ RUN apk add --no-cache \ ca-certificates \ tzdata \ nftables \ - iproute2 \ - dcron + iproute2 RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \ echo "${TZ}" > /etc/timezone diff --git a/docker/README.md b/docker/README.md index 2bb586dc..c3daaa64 100644 --- a/docker/README.md +++ b/docker/README.md @@ -57,6 +57,7 @@ docker run -d \ --cap-add NET_ADMIN \ --cap-add NET_RAW \ --cap-add SYS_ADMIN \ + --sysctl net.ipv4.ip_forward=1 \ --device /dev/net/tun:/dev/net/tun \ --restart unless-stopped \ juewuy/shellcrash:latest diff --git a/docker/compose.yml b/docker/compose.yml index 8c59972a..d246815b 100644 --- a/docker/compose.yml +++ b/docker/compose.yml @@ -14,7 +14,8 @@ services: devices: - "/dev/net/tun:/dev/net/tun" sysctls: - net.ipv4.ip_forward: 1 + - net.ipv4.ip_forward: 1 + # - net.ipv6.conf.all.forwarding=1 volumes: - shellcrash_configs:/etc/ShellCrash/configs:rw restart: unless-stopped diff --git a/scripts/libs/get_config.sh b/scripts/libs/get_config.sh index ca2d70cf..ba9b6b08 100644 --- a/scripts/libs/get_config.sh +++ b/scripts/libs/get_config.sh @@ -16,7 +16,7 @@ routing_mark=$((fwmark + 2)) [ -z "$dns_nameserver" ] && { dns_nameserver='223.5.5.5, 1.2.4.8' - nslookup localhost 127.0.0.1 >/dev/null 2>&1 && dns_nameserver='127.0.0.1' + netstat -ntlup 2>/dev/null | grep -q '127.0.0.1:53' && dns_nameserver='127.0.0.1' } [ -z "$dns_fallback" ] && dns_fallback="1.1.1.1, 8.8.8.8" [ -z "$dns_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1" diff --git a/scripts/libs/set_profile.sh b/scripts/libs/set_profile.sh index 2bf2790e..b16966ed 100644 --- a/scripts/libs/set_profile.sh +++ b/scripts/libs/set_profile.sh @@ -5,4 +5,5 @@ set_profile() { echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量 sed -i '/export CRASHDIR=*/'d "$1" echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量 + . "$1" >/dev/null 2>&1 || true } \ No newline at end of file diff --git a/scripts/menus/ddns.sh b/scripts/menus/ddns.sh index 3d6cebe5..ee76453f 100644 --- a/scripts/menus/ddns.sh +++ b/scripts/menus/ddns.sh @@ -69,23 +69,25 @@ set_ddns() { set_ddns_service() { while true; do services_dir=/etc/ddns/"$serv" + [ -s "$services_dir" ] || services_dir=/etc/ddns/services [ -s "$services_dir" ] || services_dir=/usr/share/ddns/list + [ -s "$services_dir" ] || { + msg_alert "\033[33m未找到DDNS列表文件,尝试在线获取……\033[0m" + ddns service update >/dev/null || msg_alert "\033[31m下载失败,请重试!\033[0m" + } comp_box "\033[32m请选择服务提供商:\033[0m" - # cat "$services_dir" | grep -v '^#' | awk '{print NR") " $1}' - awk '!/^#/ {print NR") " $1}' "$services_dir" | - while IFS= read -r line; do - content_line "$line" - done + list=$(awk '/^#/ || !NF {next} {print $1}' "$services_dir") + list_box "$list" - nr=$(cat "$services_dir" | grep -v '^#' | wc -l) + nr=$(echo "$list" | wc -l) common_back read -r -p "请输入对应数字> " num if [ -z "$num" ] || [ "$num" = 0 ]; then i= break elif [ "$num" -gt 0 ] && [ "$num" -lt "$nr" ]; then - service_name=$(cat "$services_dir" | grep -v '^#' | awk '{print $1}' | sed -n "$num"p | sed 's/"//g') + service_name=$(echo "$list" | sed -n "$num"p | sed 's/"//g') service=$(echo "$service_name" | sed 's/\./_/g') set_ddns break diff --git a/scripts/starts/core_config.sh b/scripts/starts/core_config.sh index 1edeb645..a5aa9813 100644 --- a/scripts/starts/core_config.sh +++ b/scripts/starts/core_config.sh @@ -42,6 +42,8 @@ get_core_config() { #下载内核配置文件 fi Https="${Server}/sub?target=${target}&${Server_ua}=${user_agent}&insert=true&new_name=true&scv=true&udp=true&${urlencodeUrl}" url_type=true + else + Https=$(echo $Https | sed 's/\\&/\&/g') #还原转义 fi #输出 echo "-----------------------------------------------" diff --git a/scripts/starts/start_legacy_wd.sh b/scripts/starts/start_legacy_wd.sh index e5cdaa8e..fbc5a820 100644 --- a/scripts/starts/start_legacy_wd.sh +++ b/scripts/starts/start_legacy_wd.sh @@ -1,20 +1,28 @@ -[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd) +[ -z "$CRASHDIR" ] && CRASHDIR=$(cd "$(dirname "$0")"/.. && pwd) PIDFILE="/tmp/ShellCrash/$1.pid" [ -f "$CRASHDIR"/.start_error ] && [ ! -f /tmp/ShellCrash/crash_start_time ] && exit 1 #当启动失败后禁止开机自启动 if [ -f "$PIDFILE" ]; then PID="$(cat "$PIDFILE")" - if [ -n "$PID" ] && [ -d "/proc/$PID" ]; then - return 0 + if [ -n "$PID" ] && [ "$PID" -eq "$PID" ] 2>/dev/null; then + if kill -0 "$PID" 2>/dev/null || [ -d "/proc/$PID" ]; then + return 0 + fi + else + rm -f "$PIDFILE" fi fi + #如果没有进程则拉起 -if [ "$1" = shellcrash ];then - "$CRASHDIR"/start.sh start -else - . "$CRASHDIR"/starts/start_legacy.sh - start_legacy "$CRASHDIR/menus/bot_tg.sh" "$1" +LOCKDIR="/tmp/ShellCrash/start_$1.lock" +if mkdir "$LOCKDIR" 2>/dev/null; then + if [ "$1" = "shellcrash" ]; then + "$CRASHDIR"/start.sh start + else + [ -f "$CRASHDIR/starts/start_legacy.sh" ] && . "$CRASHDIR/starts/start_legacy.sh" + start_legacy "$CRASHDIR/menus/bot_tg.sh" "$1" + fi + rm -d "$LOCKDIR" 2>/dev/null fi - \ No newline at end of file