mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-10 23:41:22 +00:00
Compare commits
34 Commits
1.9.4rc2
...
1.9.4rc6.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1afb261d0e | ||
|
|
32d73c18c4 | ||
|
|
cb9d5a783b | ||
|
|
c4bdd18195 | ||
|
|
7f0b0fa870 | ||
|
|
d5d9fab8e0 | ||
|
|
053f05d394 | ||
|
|
fc1c3c4415 | ||
|
|
6a1d4086f3 | ||
|
|
b59da3be8a | ||
|
|
76efd54d03 | ||
|
|
ace8b08407 | ||
|
|
f70e642fea | ||
|
|
614bc696bb | ||
|
|
cd7d4232b6 | ||
|
|
fd4ca02ff3 | ||
|
|
7d2e1c54c4 | ||
|
|
f3cd3ff18a | ||
|
|
1196557d4c | ||
|
|
1af6cf36d2 | ||
|
|
1f59a971cf | ||
|
|
9cad2c21e8 | ||
|
|
0b1d297622 | ||
|
|
0ca7bb8eb2 | ||
|
|
1bd16b5ca6 | ||
|
|
88ae50bc43 | ||
|
|
3682a99a79 | ||
|
|
1129eb79b5 | ||
|
|
dfae7195b3 | ||
|
|
da23b70ca4 | ||
|
|
70bd8ed591 | ||
|
|
b17286b73b | ||
|
|
d63b75b790 | ||
|
|
6170a0461d |
@@ -57,8 +57,7 @@ RUN apk add --no-cache \
|
|||||||
ca-certificates \
|
ca-certificates \
|
||||||
tzdata \
|
tzdata \
|
||||||
nftables \
|
nftables \
|
||||||
iproute2 \
|
iproute2
|
||||||
dcron
|
|
||||||
|
|
||||||
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
|
RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime && \
|
||||||
echo "${TZ}" > /etc/timezone
|
echo "${TZ}" > /etc/timezone
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
meta_v=v1.19.17
|
meta_v=v1.19.17
|
||||||
singboxr_v=1.13.0-alpha.27
|
singboxr_v=1.13.0-alpha.27
|
||||||
versionsh=1.9.4rc1.3
|
versionsh=1.9.4rc6
|
||||||
GeoIP_v=20251205
|
GeoIP_v=20251205
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ docker run -d \
|
|||||||
--cap-add NET_ADMIN \
|
--cap-add NET_ADMIN \
|
||||||
--cap-add NET_RAW \
|
--cap-add NET_RAW \
|
||||||
--cap-add SYS_ADMIN \
|
--cap-add SYS_ADMIN \
|
||||||
|
--sysctl net.ipv4.ip_forward=1 \
|
||||||
--device /dev/net/tun:/dev/net/tun \
|
--device /dev/net/tun:/dev/net/tun \
|
||||||
--restart unless-stopped \
|
--restart unless-stopped \
|
||||||
juewuy/shellcrash:latest
|
juewuy/shellcrash:latest
|
||||||
@@ -87,14 +88,10 @@ mkdir -p /root/ShellCrash
|
|||||||
```shell
|
```shell
|
||||||
docker run -d \
|
docker run -d \
|
||||||
………………
|
………………
|
||||||
-v /root/ShellCrash:/etc/ShellCrash \
|
-v shellcrash_configs:/etc/ShellCrash/configs \
|
||||||
………………
|
………………
|
||||||
```
|
```
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
## Compose Deployment(Compose部署)
|
## Compose Deployment(Compose部署)
|
||||||
@@ -102,8 +99,8 @@ docker run -d \
|
|||||||
### 1. 创建宿主机目录并进入目录
|
### 1. 创建宿主机目录并进入目录
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mkdir -p /root/ShellCrash
|
mkdir -p /tmp/ShellCrash
|
||||||
cd /root/ShellCrash
|
cd /tmp/ShellCrash
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 下载Compose模版
|
### 2. 下载Compose模版
|
||||||
@@ -126,8 +123,29 @@ docker compose up -d
|
|||||||
|
|
||||||
------
|
------
|
||||||
|
|
||||||
### Notes
|
## Delete(移除容器镜像或删除卷)
|
||||||
|
|
||||||
|
### Docker删除容器
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker rm -f shellcrash
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker删除卷
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker volume rm shellcrash_configs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compose删除容器&卷
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- 内置公网防火墙功能无法管理宿主机网络,请自行做好宿主机7890/9999端口的网络防护!
|
||||||
- 旁路由模式需要宿主机支持 `TUN`
|
- 旁路由模式需要宿主机支持 `TUN`
|
||||||
- macvlan 网络下宿主机默认无法直接访问容器 IP
|
- macvlan 网络下宿主机默认无法直接访问容器 IP
|
||||||
- 透明代理场景可能需要额外的网络规划
|
- 透明代理场景可能需要额外的网络规划
|
||||||
|
|||||||
@@ -14,11 +14,15 @@ services:
|
|||||||
devices:
|
devices:
|
||||||
- "/dev/net/tun:/dev/net/tun"
|
- "/dev/net/tun:/dev/net/tun"
|
||||||
sysctls:
|
sysctls:
|
||||||
net.ipv4.ip_forward: 1
|
- net.ipv4.ip_forward: 1
|
||||||
|
# - net.ipv6.conf.all.forwarding=1
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/ShellCrash:/root/ShellCrash
|
- shellcrash_configs:/etc/ShellCrash/configs:rw
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
shellcrash_configs:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
macvlan_lan:
|
macvlan_lan:
|
||||||
name: macvlan_lan
|
name: macvlan_lan
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ check_autostart(){
|
|||||||
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
||||||
elif [ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ]; then
|
elif [ -f /etc/rc.common -a "$(cat /proc/1/comm)" = "procd" ]; then
|
||||||
[ -n "$(find /etc/rc.d -name '*shellcrash')" ] && return 0
|
[ -n "$(find /etc/rc.d -name '*shellcrash')" ] && return 0
|
||||||
|
[ ! -f "$CRASHDIR"/.dis_startup ] && return 0
|
||||||
elif ckcmd systemctl; then
|
elif ckcmd systemctl; then
|
||||||
[ "$(systemctl is-enabled shellcrash.service 2>&1)" = enabled ] && return 0
|
[ "$(systemctl is-enabled shellcrash.service 2>&1)" = enabled ] && return 0
|
||||||
elif grep -q 's6' /proc/1/comm; then
|
elif grep -q 's6' /proc/1/comm; then
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ core_unzip() { #$1:需要解压的文件 $2:目标文件名
|
|||||||
}
|
}
|
||||||
core_find(){
|
core_find(){
|
||||||
if [ ! -f "$TMPDIR"/CrashCore ];then
|
if [ ! -f "$TMPDIR"/CrashCore ];then
|
||||||
[ -n "$(find "$CRASHDIR"/CrashCore.* $find_para 2>/dev/null)" ] &&
|
[ -n "$(find "$CRASHDIR"/CrashCore.* $find_para 2>/dev/null)" ] && [ "$CRASHDIR" != "$BINDIR" ] &&
|
||||||
mv -f "$CRASHDIR"/CrashCore.* "$BINDIR"/
|
mv -f "$CRASHDIR"/CrashCore.* "$BINDIR"/
|
||||||
core_dir=$(find "$BINDIR"/CrashCore.* $find_para 2>/dev/null | head -n 1)
|
core_dir=$(find "$BINDIR"/CrashCore.* $find_para 2>/dev/null | head -n 1)
|
||||||
[ -n "$core_dir" ] && core_unzip "$core_dir" CrashCore
|
[ -n "$core_dir" ] && core_unzip "$core_dir" CrashCore
|
||||||
@@ -51,7 +51,12 @@ core_check(){
|
|||||||
else
|
else
|
||||||
mv -f "$1" "$BINDIR/CrashCore.$zip_type"
|
mv -f "$1" "$BINDIR/CrashCore.$zip_type"
|
||||||
fi
|
fi
|
||||||
mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore"
|
if [ "$zip_type" = 'upx' ];then
|
||||||
|
rm -f "$1" "$TMPDIR"/core_new
|
||||||
|
ln -sf "$TMPDIR/CrashCore.upx" "$TMPDIR/CrashCore"
|
||||||
|
else
|
||||||
|
mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore"
|
||||||
|
fi
|
||||||
core_v="$v"
|
core_v="$v"
|
||||||
setconfig COMMAND "$COMMAND" "$CRASHDIR"/configs/command.env && . "$CRASHDIR"/configs/command.env
|
setconfig COMMAND "$COMMAND" "$CRASHDIR"/configs/command.env && . "$CRASHDIR"/configs/command.env
|
||||||
setconfig crashcore "$crashcore"
|
setconfig crashcore "$crashcore"
|
||||||
@@ -75,7 +80,7 @@ core_webget(){
|
|||||||
if [ "$?" = 0 ];then
|
if [ "$?" = 0 ];then
|
||||||
core_check "$TMPDIR/Coretmp.$zip_type"
|
core_check "$TMPDIR/Coretmp.$zip_type"
|
||||||
else
|
else
|
||||||
rm -rf "$TMPDIR/Coretmp.$zip_type"
|
rm -f "$TMPDIR/Coretmp.$zip_type"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ routing_mark=$((fwmark + 2))
|
|||||||
|
|
||||||
[ -z "$dns_nameserver" ] && {
|
[ -z "$dns_nameserver" ] && {
|
||||||
dns_nameserver='223.5.5.5, 1.2.4.8'
|
dns_nameserver='223.5.5.5, 1.2.4.8'
|
||||||
cat /proc/net/udp | grep -q '0035' && 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_fallback" ] && dns_fallback="1.1.1.1, 8.8.8.8"
|
||||||
[ -z "$dns_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1"
|
[ -z "$dns_resolver" ] && dns_resolver="223.5.5.5, 2400:3200::1"
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
#日志工具
|
#日志工具
|
||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
#$1日志内容$2显示颜色$3是否推送
|
#$1日志内容$2显示颜色$3是否推送$4是否覆盖上一条
|
||||||
logger() {
|
logger() {
|
||||||
TMPDIR=/tmp/ShellCrash
|
TMPDIR=/tmp/ShellCrash
|
||||||
[ -n "$2" -a "$2" != 0 ] && printf "\033[%sm%s\033[0m\n" "$2" "$1"
|
[ -n "$2" -a "$2" != 0 ] && printf "\033[%sm%s\033[0m\n" "$2" "$1"
|
||||||
log_text="$(date "+%G-%m-%d_%H:%M:%S")~$1"
|
log_text="$(date "+%G-%m-%d_%H:%M:%S")~$1"
|
||||||
|
[ "$4" = on ] && sed -i "/$1/d" "$TMPDIR"/ShellCrash.log
|
||||||
echo "$log_text" >>"$TMPDIR"/ShellCrash.log
|
echo "$log_text" >>"$TMPDIR"/ShellCrash.log
|
||||||
[ "$(wc -l "$TMPDIR"/ShellCrash.log | awk '{print $1}')" -gt 199 ] && sed -i '1,20d' "$TMPDIR"/ShellCrash.log
|
[ "$(wc -l "$TMPDIR"/ShellCrash.log | awk '{print $1}')" -gt 199 ] && sed -i '1,20d' "$TMPDIR"/ShellCrash.log
|
||||||
#推送远程日志
|
#推送远程日志
|
||||||
[ -z "$3" ] && {
|
[ "$3" != off ] && {
|
||||||
[ -n "$device_name" ] && log_text="$log_text($device_name)"
|
[ -n "$device_name" ] && log_text="$log_text($device_name)"
|
||||||
[ -n "$push_TG" ] && {
|
[ -n "$push_TG" ] && {
|
||||||
url="https://api.telegram.org/bot${push_TG}/sendMessage"
|
url="https://api.telegram.org/bot${push_TG}/sendMessage"
|
||||||
|
|||||||
@@ -1,27 +1,39 @@
|
|||||||
|
|
||||||
crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}')"
|
crondir="$(crond -h 2>&1 | grep -oE 'Default:.*' | awk -F ":" '{print $2}'| tr -d ' ')"
|
||||||
[ ! -w "$crondir" ] && crondir="/etc/storage/cron/crontabs"
|
[ ! -w "$crondir" ] && crondir="/etc/storage/cron/crontabs"
|
||||||
[ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs"
|
[ ! -w "$crondir" ] && crondir="/var/spool/cron/crontabs"
|
||||||
[ ! -w "$crondir" ] && crondir="/var/spool/cron"
|
[ ! -w "$crondir" ] && crondir="/var/spool/cron"
|
||||||
tmpcron="$TMPDIR"/cron_tmp
|
[ -z "$USER" ] && USER=$(whoami 2>/dev/null)
|
||||||
|
tmpcron=/tmp/cron_tmp
|
||||||
|
touch "$tmpcron"
|
||||||
|
|
||||||
croncmd() { #定时任务工具
|
cronadd() { #定时任务工具
|
||||||
if [ -n "$(crontab -h 2>&1 | grep '\-l')" ]; then
|
if crontab -h 2>&1 | grep -q '\-l'; then
|
||||||
crontab "$1"
|
crontab "$1"
|
||||||
elif [ -w "$crondir" ] && [ -n "$USER" ];then
|
elif [ -f "$crondir/$USER" ];then
|
||||||
[ "$1" = "-l" ] && cat "$crondir"/"$USER" 2>/dev/null
|
cat "$1" >"$crondir"/"$USER" && cru a REFRESH "0 0 1 1 * /bin/true" 2>/dev/null
|
||||||
[ -f "$1" ] && cat "$1" >"$crondir"/"$USER"
|
|
||||||
killall -HUP crond 2>/dev/null
|
|
||||||
else
|
else
|
||||||
echo "找不到可用的crond或者crontab应用!No available crond or crontab application can be found!"
|
echo "找不到可用的crond或者crontab应用!No available crond or crontab application can be found!"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
cronload() { #定时任务工具
|
||||||
|
if crontab -h 2>&1 | grep -q '\-l'; then
|
||||||
|
crontab -l
|
||||||
|
elif [ -f "$crondir/$USER" ];then
|
||||||
|
cat "$crondir"/"$USER" 2>/dev/null
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
cronset() { #定时任务设置
|
cronset() { #定时任务设置
|
||||||
# 参数1代表要移除的关键字,参数2代表要添加的任务语句
|
# 参数1代表要移除的关键字,参数2代表要添加的任务语句
|
||||||
croncmd -l >"$tmpcron"
|
cronload | grep -v '^$' | grep -vF "$1" >"$tmpcron"
|
||||||
sed -i "/$1/d" "$tmpcron"
|
[ -n "$2" ] && echo "$2" >>"$tmpcron"
|
||||||
sed -i '/^$/d' "$tmpcron"
|
cronadd "$tmpcron"
|
||||||
echo "$2" >>"$tmpcron"
|
#华硕/Padavan固件存档在本地,其他则删除
|
||||||
croncmd "$tmpcron"
|
if [ -d /jffs ] || [ -d /etc/storage/ShellCrash ];then
|
||||||
rm -f "$tmpcron"
|
mv -f "$tmpcron" "$CRASHDIR"/task/cron
|
||||||
|
else
|
||||||
|
rm -f "$tmpcron"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,5 @@ set_profile() {
|
|||||||
echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量
|
echo "alias ${my_alias}=\"$shtype $CRASHDIR/menu.sh\"" >>"$1" #设置快捷命令环境变量
|
||||||
sed -i '/export CRASHDIR=*/'d "$1"
|
sed -i '/export CRASHDIR=*/'d "$1"
|
||||||
echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量
|
echo "export CRASHDIR=\"$CRASHDIR\"" >>"$1" #设置路径环境变量
|
||||||
|
. "$1" >/dev/null 2>&1 || true
|
||||||
}
|
}
|
||||||
@@ -13,18 +13,26 @@ webget(){
|
|||||||
#参数【$1】代表下载目录,【$2】代表在线地址
|
#参数【$1】代表下载目录,【$2】代表在线地址
|
||||||
#参数【$3】代表输出显示,【$4】不启用重定向
|
#参数【$3】代表输出显示,【$4】不启用重定向
|
||||||
#参数【$5】代表验证证书,【$6】使用自定义UA
|
#参数【$5】代表验证证书,【$6】使用自定义UA
|
||||||
[ -n "$6" ] && agent="--user-agent \"$6\""
|
[ -n "$6" ] && agent="--user-agent $6"
|
||||||
if wget --help 2>&1 | grep -q 'show-progress' >/dev/null 2>&1; then
|
if wget --help 2>&1 | grep -q 'show-progress' >/dev/null 2>&1; then
|
||||||
[ "$3" = "echooff" ] && progress='-q' || progress='-q --show-progress'
|
[ "$3" = "echooff" ] && progress='-q' || progress='-q --show-progress'
|
||||||
[ "$4" = "rediroff" ] && redirect='--max-redirect=0' || redirect=''
|
[ "$4" = "rediroff" ] && redirect='--max-redirect=0' || redirect=''
|
||||||
[ "$5" = "skipceroff" ] && certificate='' || certificate='--no-check-certificate'
|
if [ "$5" = "skipceroff" ] || [ "$skip_cert" = OFF ];then
|
||||||
|
certificate=''
|
||||||
|
else
|
||||||
|
certificate='--no-check-certificate'
|
||||||
|
fi
|
||||||
wget -Y on $agent $progress $redirect $certificate --timeout=3 -O "$1" "$url" && return 0 #成功则退出否则重试
|
wget -Y on $agent $progress $redirect $certificate --timeout=3 -O "$1" "$url" && return 0 #成功则退出否则重试
|
||||||
wget -Y off $agent $progress $redirect $certificate --timeout=5 -O "$1" "$2"
|
wget -Y off $agent $progress $redirect $certificate --timeout=5 -O "$1" "$2"
|
||||||
return $?
|
return $?
|
||||||
elif curl --version >/dev/null 2>&1; then
|
elif curl --version >/dev/null 2>&1; then
|
||||||
[ "$3" = "echooff" ] && progress='-s' || progress='-#'
|
[ "$3" = "echooff" ] && progress='-s' || progress='-#'
|
||||||
[ "$4" = "rediroff" ] && redirect='' || redirect='-L'
|
[ "$4" = "rediroff" ] && redirect='' || redirect='-L'
|
||||||
[ "$5" = "skipceroff" ] && certificate='' || certificate='-k'
|
if [ "$5" = "skipceroff" ] || [ "$skip_cert" = OFF ];then
|
||||||
|
certificate=''
|
||||||
|
else
|
||||||
|
certificate='-k'
|
||||||
|
fi
|
||||||
if curl --version | grep -q '^curl 8.' && ckcmd base64; then
|
if curl --version | grep -q '^curl 8.' && ckcmd base64; then
|
||||||
auth_b64=$(printf '%s' "$authentication" | base64)
|
auth_b64=$(printf '%s' "$authentication" | base64)
|
||||||
result=$(curl $agent -w '%{http_code}' --connect-timeout 3 --proxy-header "Proxy-Authorization: Basic $auth_b64" $progress $redirect $certificate -o "$1" "$url")
|
result=$(curl $agent -w '%{http_code}' --connect-timeout 3 --proxy-header "Proxy-Authorization: Basic $auth_b64" $progress $redirect $certificate -o "$1" "$url")
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ ckstatus() { #脚本启动前检查
|
|||||||
userguide=1
|
userguide=1
|
||||||
setconfig userguide 1
|
setconfig userguide 1
|
||||||
. "$CRASHDIR"/menus/8_tools.sh && userguide
|
. "$CRASHDIR"/menus/8_tools.sh && userguide
|
||||||
|
. "$CRASHDIR"/configs/ShellCrash.cfg
|
||||||
fi
|
fi
|
||||||
#检查执行权限
|
#检查执行权限
|
||||||
[ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh
|
[ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ __IS_MODULE_2_SETTINGS_LOADED=1
|
|||||||
settings() { #功能设置
|
settings() { #功能设置
|
||||||
#获取设置默认显示
|
#获取设置默认显示
|
||||||
[ -z "$skip_cert" ] && skip_cert=ON
|
[ -z "$skip_cert" ] && skip_cert=ON
|
||||||
[ -z "$sniffer" ] && sniffer=OFF
|
[ -z "$sniffer" ] && {
|
||||||
|
sniffer=OFF
|
||||||
|
echo "$crashcore" | grep -q 'singbox' && sniffer=ON
|
||||||
|
}
|
||||||
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
[ -z "$dns_mod" ] && dns_mod='redir_host'
|
||||||
#
|
#
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
@@ -633,7 +636,7 @@ fw_filter_lan() { #局域网设备过滤
|
|||||||
fi
|
fi
|
||||||
######
|
######
|
||||||
echo -e "\033[30;47m请在此添加或移除设备\033[0m"
|
echo -e "\033[30;47m请在此添加或移除设备\033[0m"
|
||||||
echo -e "当前过滤方式为:\033[33m$fw_filter_lan_type模式\033[0m"
|
echo -e "当前过滤方式为:\033[33m$macfilter_type模式\033[0m"
|
||||||
echo -e "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核"
|
echo -e "仅列表内设备流量\033[36m$fw_filter_lan_scrip经过\033[0m内核"
|
||||||
if [ -n "$(cat "$CRASHDIR"/configs/mac)" ]; then
|
if [ -n "$(cat "$CRASHDIR"/configs/mac)" ]; then
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
@@ -662,7 +665,7 @@ fw_filter_lan() { #局域网设备过滤
|
|||||||
macfilter_type=$fw_filter_lan_over
|
macfilter_type=$fw_filter_lan_over
|
||||||
setconfig macfilter_type $macfilter_type
|
setconfig macfilter_type $macfilter_type
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
echo -e "\033[32m已切换为$fw_filter_lan_type模式!\033[0m"
|
echo -e "\033[32m已切换为$macfilter_type模式!\033[0m"
|
||||||
fw_filter_lan
|
fw_filter_lan
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
|
|||||||
@@ -108,9 +108,7 @@ task_add(){ #任务添加
|
|||||||
}
|
}
|
||||||
task_del(){ #任务删除
|
task_del(){ #任务删除
|
||||||
#删除定时任务
|
#删除定时任务
|
||||||
croncmd -l > "$TMPDIR"/cron
|
cronset "$1"
|
||||||
sed -i "/$1/d" "$TMPDIR"/cron && croncmd "$TMPDIR"/cron
|
|
||||||
rm -f "$TMPDIR"/cron
|
|
||||||
#删除条件任务
|
#删除条件任务
|
||||||
sed -i "/$1/d" "$CRASHDIR"/task/cron 2>/dev/null
|
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/bfstart 2>/dev/null
|
||||||
@@ -214,7 +212,7 @@ task_type(){ #任务条件选择菜单
|
|||||||
task_manager(){ #任务管理列表
|
task_manager(){ #任务管理列表
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
#抽取并生成临时列表
|
#抽取并生成临时列表
|
||||||
croncmd -l > "$TMPDIR"/task_cronlist
|
cronload > "$TMPDIR"/task_cronlist
|
||||||
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | awk -F ' ' '{print $2" "$3}' > "$TMPDIR"/task_list
|
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | awk -F ' ' '{print $2" "$3}' > "$TMPDIR"/task_list
|
||||||
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >> "$TMPDIR"/task_list
|
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | awk -F ' ' '{print $2" "$3}' >> "$TMPDIR"/task_list
|
||||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >> "$TMPDIR"/task_list
|
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >> "$TMPDIR"/task_list
|
||||||
@@ -254,9 +252,8 @@ task_manager(){ #任务管理列表
|
|||||||
read -p "旧版任务不支持管理,是否移除?(1/0) > " res
|
read -p "旧版任务不支持管理,是否移除?(1/0) > " res
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
cronname=$(echo $task_txt | awk -F '-' '{print $2}')
|
cronname=$(echo $task_txt | awk -F '-' '{print $2}')
|
||||||
croncmd -l > $TMPDIR/conf && sed -i "/$cronname/d" $TMPDIR/conf && croncmd $TMPDIR/conf
|
cronset "$cronname"
|
||||||
sed -i "/$cronname/d" $clashdir/tools/cron 2>/dev/null
|
sed -i "/$cronname/d" "$CRASHDIR"/task/cron 2>/dev/null
|
||||||
rm -f $TMPDIR/conf
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
task_des=$(echo $task_txt | awk '{print $2}')
|
task_des=$(echo $task_txt | awk '{print $2}')
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
|
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
|
||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
|
. "$CRASHDIR"/libs/set_config.sh
|
||||||
. "$CRASHDIR"/libs/web_get_lite.sh
|
. "$CRASHDIR"/libs/web_get_lite.sh
|
||||||
. "$CRASHDIR"/menus/running_status.sh
|
. "$CRASHDIR"/menus/running_status.sh
|
||||||
. "$CRASHDIR"/configs/gateway.cfg
|
. "$CRASHDIR"/configs/gateway.cfg
|
||||||
@@ -308,6 +309,9 @@ polling(){
|
|||||||
/crash)
|
/crash)
|
||||||
send_menu
|
send_menu
|
||||||
;;
|
;;
|
||||||
|
/"$my_alias")
|
||||||
|
send_menu
|
||||||
|
;;
|
||||||
/help)
|
/help)
|
||||||
send_help
|
send_help
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -2,18 +2,16 @@
|
|||||||
. "$CRASHDIR"/libs/set_cron.sh
|
. "$CRASHDIR"/libs/set_cron.sh
|
||||||
|
|
||||||
bot_tg_start(){
|
bot_tg_start(){
|
||||||
bot_tg_stop
|
|
||||||
. "$CRASHDIR"/starts/start_legacy.sh
|
. "$CRASHDIR"/starts/start_legacy.sh
|
||||||
start_legacy "$CRASHDIR/menus/bot_tg.sh" 'bot_tg'
|
start_legacy "$CRASHDIR/menus/bot_tg.sh" 'bot_tg'
|
||||||
bot_tg_cron
|
bot_tg_cron
|
||||||
}
|
}
|
||||||
bot_tg_stop(){
|
bot_tg_stop(){
|
||||||
cronset 'TG_BOT守护进程'
|
cronload | grep -q 'TG_BOT' && cronset 'TG_BOT'
|
||||||
[ -f "$TMPDIR/bot_tg.pid" ] && kill -TERM "$(cat "$TMPDIR/bot_tg.pid")" 2>/dev/null
|
[ -f "$TMPDIR/bot_tg.pid" ] && kill -TERM "$(cat "$TMPDIR/bot_tg.pid")" 2>/dev/null
|
||||||
killall bot_tg.sh 2>/dev/null
|
killall bot_tg.sh 2>/dev/null
|
||||||
rm -f "$TMPDIR/bot_tg.pid"
|
rm -f "$TMPDIR/bot_tg.pid"
|
||||||
}
|
}
|
||||||
bot_tg_cron(){
|
bot_tg_cron(){
|
||||||
cronset 'TG_BOT守护进程'
|
|
||||||
cronset 'TG_BOT守护进程' "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程"
|
cronset 'TG_BOT守护进程' "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,16 +59,21 @@ set_ddns() {
|
|||||||
}
|
}
|
||||||
set_ddns_service() {
|
set_ddns_service() {
|
||||||
services_dir=/etc/ddns/"$serv"
|
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" ] || services_dir=/usr/share/ddns/list
|
||||||
|
[ -s "$services_dir" ] || {
|
||||||
|
echo -e "\033[33m未找到DDNS列表文件,尝试在线获取……\033[0m"
|
||||||
|
ddns service update >/dev/null || echo -e "\033[31m下载失败,请重试!\033[0m"
|
||||||
|
}
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
echo -e "\033[32m请选择服务提供商\033[0m"
|
echo -e "\033[32m请选择服务提供商\033[0m"
|
||||||
cat "$services_dir" | grep -v '^#' | awk '{print " "NR" " $1}'
|
cat "$services_dir" | grep -vE '^#|^[[:space:]]*$' | awk '{print " "NR" " $1}'
|
||||||
nr=$(cat "$services_dir" | grep -v '^#' | wc -l)
|
nr=$(cat "$services_dir" | grep -vE '^#|^[[:space:]]*$' | wc -l)
|
||||||
read -p "请输入对应数字 > " num
|
read -p "请输入对应数字 > " num
|
||||||
if [ -z "$num" ]; then
|
if [ -z "$num" ]; then
|
||||||
i=
|
i=
|
||||||
elif [ "$num" -gt 0 -a "$num" -lt $nr ]; then
|
elif [ "$num" -gt 0 -a "$num" -lt $nr ]; then
|
||||||
service_name=$(cat "$services_dir" | grep -v '^#' | awk '{print $1}' | sed -n "$num"p | sed 's/"//g')
|
service_name=$(cat "$services_dir" | grep -vE '^#|^[[:space:]]*$' | awk '{print $1}' | sed -n "$num"p | sed 's/"//g')
|
||||||
service=$(echo $service_name | sed 's/\./_/g')
|
service=$(echo $service_name | sed 's/\./_/g')
|
||||||
set_ddns
|
set_ddns
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -14,7 +14,11 @@ task_logger(){
|
|||||||
[ "$task_push" = 1 ] && push= || push=off
|
[ "$task_push" = 1 ] && push= || push=off
|
||||||
[ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m"
|
[ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m"
|
||||||
[ "$3" = 'off' ] && push=off
|
[ "$3" = 'off' ] && push=off
|
||||||
echo "$1" |grep -qE '(每隔|时每)([1-9]|[1-9][0-9])分钟' || logger "$1" 0 "$push"
|
echo "$1" |grep -qE '(每隔|时每)([1-9]|[1-9][0-9])分钟' && {
|
||||||
|
push=off
|
||||||
|
cover=on
|
||||||
|
}
|
||||||
|
logger "$1" 0 "$push" "$cover"
|
||||||
}
|
}
|
||||||
|
|
||||||
#任务命令
|
#任务命令
|
||||||
@@ -31,7 +35,7 @@ update_core(){ #自动更新内核
|
|||||||
task_logger "任务【自动更新内核】中止-未检测到版本更新"
|
task_logger "任务【自动更新内核】中止-未检测到版本更新"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
. "$CRASHDIR"/libs/core_webget.sh && core_webget #调用下载工具
|
. "$CRASHDIR"/libs/core_tools.sh && core_webget #调用下载工具
|
||||||
case "$?" in
|
case "$?" in
|
||||||
0)
|
0)
|
||||||
task_logger "任务【自动更新内核】下载完成,正在重启服务!"
|
task_logger "任务【自动更新内核】下载完成,正在重启服务!"
|
||||||
@@ -57,18 +61,18 @@ update_scripts(){ #自动更新脚本
|
|||||||
task_logger "任务【自动更新脚本】中止-未检测到版本更新"
|
task_logger "任务【自动更新脚本】中止-未检测到版本更新"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
get_bin "$TMPDIR"/clashfm.tar.gz "bin/update.tar.gz"
|
get_bin "$TMPDIR"/ShellCrash.tar.gz "ShellCrash.tar.gz"
|
||||||
if [ "$?" != "0" ];then
|
if [ "$?" != "0" ];then
|
||||||
rm -rf "$TMPDIR"/clashfm.tar.gz
|
rm -rf "$TMPDIR"/ShellCrash.tar.gz
|
||||||
task_logger "任务【自动更新内核】出错-下载失败!"
|
task_logger "任务【自动更新内核】出错-下载失败!"
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
#停止服务
|
#停止服务
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
#解压
|
#解压
|
||||||
tar -zxf "$TMPDIR"/clashfm.tar.gz ${tar_para} -C "$CRASHDIR"/
|
tar -zxf "$TMPDIR"/ShellCrash.tar.gz ${tar_para} -C "$CRASHDIR"/
|
||||||
if [ $? -ne 0 ];then
|
if [ $? -ne 0 ];then
|
||||||
rm -rf "$TMPDIR"/clashfm.tar.gz
|
rm -rf "$TMPDIR"/ShellCrash.tar.gz
|
||||||
task_logger "任务【自动更新内核】出错-解压失败!"
|
task_logger "任务【自动更新内核】出错-解压失败!"
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
return 1
|
return 1
|
||||||
@@ -115,7 +119,7 @@ reset_firewall(){ #重设透明路由防火墙
|
|||||||
"$CRASHDIR"/start.sh afstart
|
"$CRASHDIR"/start.sh afstart
|
||||||
}
|
}
|
||||||
ntp(){
|
ntp(){
|
||||||
[ "$crashcore" != singbox ] && ckcmd ntpd && ntpd -n -q -p 203.107.6.88 >/dev/null 2>&1 || exit 0
|
ckcmd ntpd && ntpd -n -q -p 203.107.6.88 >/dev/null 2>&1 || exit 0
|
||||||
}
|
}
|
||||||
web_save_auto(){
|
web_save_auto(){
|
||||||
. "$CRASHDIR"/libs/web_save.sh && web_save
|
. "$CRASHDIR"/libs/web_save.sh && web_save
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ case "$1" in
|
|||||||
start)
|
start)
|
||||||
[ -n "$(pidof CrashCore)" ] && $0 stop #禁止多实例
|
[ -n "$(pidof CrashCore)" ] && $0 stop #禁止多实例
|
||||||
stop_firewall #清理路由策略
|
stop_firewall #清理路由策略
|
||||||
rm -f "CRASHDIR"/.start_error #移除自启失败标记
|
rm -f "$CRASHDIR"/\.start_error #移除自启失败标记
|
||||||
#使用不同方式启动服务
|
#使用不同方式启动服务
|
||||||
if [ "$firewall_area" = "5" ]; then #主旁转发
|
if [ "$firewall_area" = "5" ]; then #主旁转发
|
||||||
. "$CRASHDIR"/starts/fw_start.sh
|
. "$CRASHDIR"/starts/fw_start.sh
|
||||||
@@ -67,10 +67,10 @@ start)
|
|||||||
stop)
|
stop)
|
||||||
logger ShellCrash服务即将关闭……
|
logger ShellCrash服务即将关闭……
|
||||||
[ -n "$(pidof CrashCore)" ] && web_save #保存面板配置
|
[ -n "$(pidof CrashCore)" ] && web_save #保存面板配置
|
||||||
#删除守护进程&面板配置自动保存
|
#清理定时任务
|
||||||
cronset '保守模式守护进程'
|
cronload | grep -vE '^$|start_legacy_wd.sh|运行时每' > "$TMPDIR"/cron_tmp
|
||||||
cronset '运行时每'
|
cronadd "$TMPDIR"/cron_tmp
|
||||||
cronset '流媒体预解析'
|
rm -f "$TMPDIR"/cron_tmp
|
||||||
#停止tg_bot
|
#停止tg_bot
|
||||||
. "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
. "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
|
||||||
#多种方式结束进程
|
#多种方式结束进程
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ if [ -n "$test" -o -n "$(pidof CrashCore)" ]; then
|
|||||||
[ "$start_old" = "ON" ] && [ ! -L "$TMPDIR"/CrashCore ] && rm -f "$TMPDIR"/CrashCore #删除缓存目录内核文件
|
[ "$start_old" = "ON" ] && [ ! -L "$TMPDIR"/CrashCore ] && rm -f "$TMPDIR"/CrashCore #删除缓存目录内核文件
|
||||||
. "$CRASHDIR"/starts/fw_start.sh #配置防火墙流量劫持
|
. "$CRASHDIR"/starts/fw_start.sh #配置防火墙流量劫持
|
||||||
date +%s >"$TMPDIR"/crash_start_time #标记启动时间
|
date +%s >"$TMPDIR"/crash_start_time #标记启动时间
|
||||||
#TG机器人守护进程
|
|
||||||
[ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_cron
|
|
||||||
#后台还原面板配置
|
#后台还原面板配置
|
||||||
[ -s "$CRASHDIR"/configs/web_save ] && {
|
[ -s "$CRASHDIR"/configs/web_save ] && {
|
||||||
. "$CRASHDIR"/libs/web_restore.sh
|
. "$CRASHDIR"/libs/web_restore.sh
|
||||||
@@ -33,27 +31,26 @@ if [ -n "$test" -o -n "$(pidof CrashCore)" ]; then
|
|||||||
sleep 5
|
sleep 5
|
||||||
logger ShellCrash服务已启动!
|
logger ShellCrash服务已启动!
|
||||||
} &
|
} &
|
||||||
ckcmd mtd_storage.sh && mtd_storage.sh save >/dev/null 2>&1 & #Padavan保存/etc/storage
|
ckcmd mtd_storage.sh && mtd_storage.sh save >/dev/null 2>&1 #Padavan保存/etc/storage
|
||||||
#加载定时任务
|
#加载定时任务
|
||||||
[ -s "$CRASHDIR"/task/cron ] && croncmd "$CRASHDIR"/task/cron
|
cronload | grep -v '^$' > "$TMPDIR"/cron_tmp
|
||||||
[ -s "$CRASHDIR"/task/running ] && {
|
[ -s "$CRASHDIR"/task/cron ] && cat "$CRASHDIR"/task/cron >> "$TMPDIR"/cron_tmp
|
||||||
cronset '运行时每'
|
[ -s "$CRASHDIR"/task/running ] && cat "$CRASHDIR"/task/running >> "$TMPDIR"/cron_tmp
|
||||||
while read line; do
|
[ "$bot_tg_service" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程" >> "$TMPDIR"/cron_tmp
|
||||||
cronset '2fjdi124dd12s' "$line"
|
[ "$start_old" = ON ] && echo "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh shellcrash #ShellCrash保守模式守护进程" >> "$TMPDIR"/cron_tmp
|
||||||
done <"$CRASHDIR"/task/running
|
awk '!x[$0]++' "$TMPDIR"/cron_tmp > "$TMPDIR"/cron_tmp2 #删除重复行
|
||||||
}
|
cronadd "$TMPDIR"/cron_tmp2
|
||||||
[ "$start_old" = "ON" ] && cronset '保守模式守护进程' "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh shellcrash #ShellCrash保守模式守护进程"
|
rm -f "$TMPDIR"/cron_tmp "$TMPDIR"/cron_tmp2
|
||||||
#加载条件任务
|
#加载条件任务
|
||||||
[ -s "$CRASHDIR"/task/afstart ] && { . "$CRASHDIR"/task/afstart; } &
|
[ -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 "$CRASHDIR"/task/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)
|
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\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall
|
||||||
line=$(grep -En "fw.* start" /etc/init.d/firewall | cut -d ":" -f 1)
|
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\\. $CRASHDIR/task/affirewall" /etc/init.d/firewall
|
||||||
} &
|
} &
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
. "$CRASHDIR"/starts/start_error.sh
|
. "$CRASHDIR"/starts/start_error.sh
|
||||||
"$CRASHDIR"/start.sh stop
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
[ ! -f "$TMPDIR" ] && mkdir -p "$TMPDIR"
|
[ ! -f "$TMPDIR" ] && mkdir -p "$TMPDIR"
|
||||||
|
|
||||||
#当上次启动失败时终止自启动
|
#当上次启动失败时终止自启动
|
||||||
[ -f "CRASHDIR"/.start_error ] && exit 1
|
[ -f "$CRASHDIR"/.start_error ] && exit 1
|
||||||
#加载工具
|
#加载工具
|
||||||
. "$CRASHDIR"/libs/check_cmd.sh
|
. "$CRASHDIR"/libs/check_cmd.sh
|
||||||
. "$CRASHDIR"/libs/check_target.sh
|
. "$CRASHDIR"/libs/check_target.sh
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ get_core_config() { #下载内核配置文件
|
|||||||
fi
|
fi
|
||||||
Https="${Server}/sub?target=${target}&${Server_ua}=${user_agent}&insert=true&new_name=true&scv=true&udp=true&${urlencodeUrl}"
|
Https="${Server}/sub?target=${target}&${Server_ua}=${user_agent}&insert=true&new_name=true&scv=true&udp=true&${urlencodeUrl}"
|
||||||
url_type=true
|
url_type=true
|
||||||
|
else
|
||||||
|
Https=$(echo $Https | sed 's/\\&/\&/g') #还原转义
|
||||||
fi
|
fi
|
||||||
#输出
|
#输出
|
||||||
echo "-----------------------------------------------"
|
echo "-----------------------------------------------"
|
||||||
@@ -65,7 +67,7 @@ get_core_config() { #下载内核配置文件
|
|||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
retry=$((retry + 1))
|
retry=$((retry + 1))
|
||||||
logger "配置文件获取失败!" 31
|
logger "配置文件获取失败!" 31 off on
|
||||||
if [ "$retry" = 1 ]; then
|
if [ "$retry" = 1 ]; then
|
||||||
echo -e "\033[32m尝试更新服务器列表并使用其他服务器获取配置!\033[0m"
|
echo -e "\033[32m尝试更新服务器列表并使用其他服务器获取配置!\033[0m"
|
||||||
update_servers
|
update_servers
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ fi
|
|||||||
#写入环境变量
|
#写入环境变量
|
||||||
set_profile "$profile"
|
set_profile "$profile"
|
||||||
#启动进程或删除守护进程
|
#启动进程或删除守护进程
|
||||||
if [ -f "$CRASHDIR"/.dis_startup ];then
|
if [ -f "$CRASHDIR"/.dis_startup ] || [ -f "$CRASHDIR"/.start_error ];then
|
||||||
cronset "保守模式守护进程"
|
cronset "保守模式守护进程"
|
||||||
else
|
else
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
#生成add_route.json
|
#生成add_route.json
|
||||||
#域名嗅探配置
|
#域名嗅探配置
|
||||||
[ "$sniffer" = ON ] && sniffer_set='{ "action": "sniff", "timeout": "500ms" },'
|
[ "$sniffer" != OFF ] && sniffer_set='{ "action": "sniff", "timeout": "500ms" },'
|
||||||
[ "$ts_service" = ON ] && tailscale_set='{ "inbound": [ "ts-ep" ], "port": 53, "action": "hijack-dns" },'
|
[ "$ts_service" = ON ] && tailscale_set='{ "inbound": [ "ts-ep" ], "port": 53, "action": "hijack-dns" },'
|
||||||
cat >"$TMPDIR"/jsons/add_route.json <<EOF
|
cat >"$TMPDIR"/jsons/add_route.json <<EOF
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -71,11 +71,11 @@ auto_start(){
|
|||||||
set_profile '/etc/profile'
|
set_profile '/etc/profile'
|
||||||
}
|
}
|
||||||
#启动服务
|
#启动服务
|
||||||
if [ ! -f "$CRASHDIR"/.dis_startup ]; then
|
if [ ! -f "$CRASHDIR"/.dis_startup ] && [ ! -f "$CRASHDIR"/.start_error ]; then
|
||||||
#AX6S/AX6000修复tun功能
|
#AX6S/AX6000修复tun功能
|
||||||
[ -s "$CRASHDIR"/tools/tun.ko ] && tunfix
|
[ -s "$CRASHDIR"/tools/tun.ko ] && tunfix
|
||||||
#小米7000/小米万兆修复tproxy
|
#小米7000/小米万兆修复tproxy
|
||||||
[ -f /etc/init.d/qca-nss-ecm ] && [ "$redir_mod" = 'Tproxy' ] && tproxyfix
|
[ -f /etc/init.d/qca-nss-ecm ] && echo "$redir_mod" | grep -q 'Tproxy' && tproxyfix
|
||||||
#自动覆盖根证书文件
|
#自动覆盖根证书文件
|
||||||
[ -s "$CRASHDIR"/tools/ca-certificates.crt ] && cp -f "$CRASHDIR"/tools/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
[ -s "$CRASHDIR"/tools/ca-certificates.crt ] && cp -f "$CRASHDIR"/tools/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
||||||
#启动服务
|
#启动服务
|
||||||
|
|||||||
@@ -11,3 +11,4 @@ touch "$CRASHDIR"/.start_error #标记启动失败,防止自启
|
|||||||
error=$(cat "$TMPDIR"/core_test.log | grep -iEo 'error.*=.*|.*ERROR.*|.*FATAL.*')
|
error=$(cat "$TMPDIR"/core_test.log | grep -iEo 'error.*=.*|.*ERROR.*|.*FATAL.*')
|
||||||
logger "服务启动失败!请查看报错信息!详细信息请查看$TMPDIR/core_test.log" 33
|
logger "服务启动失败!请查看报错信息!详细信息请查看$TMPDIR/core_test.log" 33
|
||||||
logger "$error" 31
|
logger "$error" 31
|
||||||
|
"$CRASHDIR"/start.sh stop
|
||||||
|
|||||||
@@ -1,18 +1,28 @@
|
|||||||
|
|
||||||
[ -z "$CRASHDIR" ] && CRASHDIR=$( cd $(dirname $0);cd ..;pwd)
|
[ -z "$CRASHDIR" ] && CRASHDIR=$(cd "$(dirname "$0")"/.. && pwd)
|
||||||
PIDFILE="/tmp/ShellCrash/$1.pid"
|
PIDFILE="/tmp/ShellCrash/$1.pid"
|
||||||
|
|
||||||
|
[ -f "$CRASHDIR"/.start_error ] && [ ! -f /tmp/ShellCrash/crash_start_time ] && exit 1 #当启动失败后禁止开机自启动
|
||||||
|
|
||||||
if [ -f "$PIDFILE" ]; then
|
if [ -f "$PIDFILE" ]; then
|
||||||
PID="$(cat "$PIDFILE")"
|
PID="$(cat "$PIDFILE")"
|
||||||
if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
|
if [ -n "$PID" ] && [ "$PID" -eq "$PID" ] 2>/dev/null; then
|
||||||
return 0
|
if kill -0 "$PID" 2>/dev/null || [ -d "/proc/$PID" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
rm -f "$PIDFILE"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#如果没有进程则拉起
|
#如果没有进程则拉起
|
||||||
if [ "$1" = shellcrash ];then
|
LOCKDIR="/tmp/ShellCrash/start_$1.lock"
|
||||||
"$CRASHDIR"/start.sh start
|
if mkdir "$LOCKDIR" 2>/dev/null; then
|
||||||
else
|
if [ "$1" = "shellcrash" ]; then
|
||||||
. "$CRASHDIR"/starts/start_legacy.sh
|
"$CRASHDIR"/start.sh start
|
||||||
start_legacy "$CRASHDIR/menus/bot_tg.sh" "$1"
|
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
|
fi
|
||||||
|
|
||||||
Reference in New Issue
Block a user