Keep Servers Alive #264
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Keep Servers Alive | |
on: | |
schedule: | |
- cron: '0 */4 * * *' # 每4小时执行一次(私库每月500分钟运行时长,每天16分钟) | |
workflow_dispatch: | |
jobs: | |
keep_servers_alive: | |
runs-on: ubuntu-latest | |
env: | |
# serv00变量添加规则: | |
# RES:n表示每次不重置部署,y表示每次重置部署。SSH_USER表示用户名。SSH_PASS表示密码。REALITY表示reality域名(用户名.serv00.net)。SUUID表示uuid。TCP1_PORT表示vless的tcp端口。TCP2_PORT表示vmess的tcp端口。UDP_PORT表示hy2的udp端口。HOST表示登录服务器域名。ARGO_DOMAIN表示argo固定域名,临时域名留空。ARGO_AUTH表示argo固定域名token,临时域名留空 | |
# 每行一个{serv00服务器},末尾用,间隔 | |
ACCOUNTS: > | |
[ | |
{"RES":"y", "SSH_USER":"xiaoxiaoyan", "SSH_PASS":"M@ung1985", "REALITY":"www.wto.org", "SUUID":"a0ae1415-3390-4f92-ab83-d942db07ae94", "TCP1_PORT":"25682", "TCP2_PORT":"4564", "UDP_PORT":"13901", "HOST":"s6.serv00.com", "ARGO_DOMAIN":"ss6.ooaoa.us.kg", "ARGO_AUTH":"eyJhIjoiYTk1ZjI1NjdjMTM1NmM4Mjg5MzYwNWE0MGY0NzMzNzIiLCJ0IjoiOTNiMGQxMjEtYjgwYy00NDU1LTlkZDEtYjVhNGQyOTUwZWM4IiwicyI6IlkyRmlabVl5TUdZdFpERmtOeTAwTUdFeExXSTBNakF0Tm1GalpHUXlNVGswWm1aayJ9"} | |
] | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v2 | |
- name: Install required packages | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y sshpass curl jq | |
- name: Process each account | |
run: | | |
run_remote_command() { | |
local RES=$1 | |
local SSH_USER=$2 | |
local SSH_PASS=$3 | |
local REALITY=${4} | |
local SUUID=$5 | |
local TCP1_PORT=$6 | |
local TCP2_PORT=$7 | |
local UDP_PORT=$8 | |
local HOST=$9 | |
local ARGO_DOMAIN=${10} | |
local ARGO_AUTH=${11} | |
if [ -z "${ARGO_DOMAIN}" ]; then | |
echo "Argo域名为空,申请Argo临时域名" | |
else | |
echo "Argo已设置固定域名:${ARGO_DOMAIN}" | |
fi | |
remote_command="export reym=$REALITY UUID=$SUUID vless_port=$TCP1_PORT vmess_port=$TCP2_PORT hy2_port=$UDP_PORT reset=$RES ARGO_DOMAIN=${ARGO_DOMAIN} ARGO_AUTH=${ARGO_AUTH} && bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00keep.sh)" | |
echo "Executing remote command on $HOST as $SSH_USER with command: $remote_command" | |
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "$remote_command" | |
} | |
echo "*****************************************************" | |
echo "*****************************************************" | |
echo "甬哥Github项目 :github.com/yonggekkk" | |
echo "甬哥Blogger博客 :ygkkk.blogspot.com" | |
echo "甬哥YouTube频道 :www.youtube.com/@ygkkk" | |
echo "自动远程部署并保活Serv00三合一协议脚本【Github】" | |
echo "版本:V25.1.11" | |
echo "*****************************************************" | |
echo "*****************************************************" | |
count=0 | |
for account in $(echo "${ACCOUNTS}" | jq -c '.[]'); do | |
count=$((count+1)) | |
RES=$(echo $account | jq -r '.RES') | |
SSH_USER=$(echo $account | jq -r '.SSH_USER') | |
SSH_PASS=$(echo $account | jq -r '.SSH_PASS') | |
REALITY=$(echo $account | jq -r '.REALITY') | |
SUUID=$(echo $account | jq -r '.SUUID') | |
TCP1_PORT=$(echo $account | jq -r '.TCP1_PORT') | |
TCP2_PORT=$(echo $account | jq -r '.TCP2_PORT') | |
UDP_PORT=$(echo $account | jq -r '.UDP_PORT') | |
HOST=$(echo $account | jq -r '.HOST') | |
ARGO_DOMAIN=$(echo $account | jq -r '.ARGO_DOMAIN') | |
ARGO_AUTH=$(echo $account | jq -r '.ARGO_AUTH') | |
if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" -q exit; then | |
echo "🎉恭喜!✅第【$count】台服务器连接成功!🚀服务器地址:$HOST ,账户名:$SSH_USER" | |
if [ -z "${ARGO_DOMAIN}" ]; then | |
check_process="ps aux | grep '[c]onfig' > /dev/null && ps aux | grep [l]ocalhost:$TCP2_PORT > /dev/null" | |
else | |
check_process="ps aux | grep '[c]onfig' > /dev/null && ps aux | grep '[t]oken $ARGO_AUTH' > /dev/null" | |
fi | |
if ! sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "$check_process" || [[ "$RES" =~ ^[Yy]$ ]]; then | |
echo "⚠️检测到主进程或者argo进程未启动,或者执行重置" | |
echo "⚠️现在开始修复或重置部署……请稍等" | |
output=$(run_remote_command "$RES" "$SSH_USER" "$SSH_PASS" "${REALITY}" "$SUUID" "$TCP1_PORT" "$TCP2_PORT" "$UDP_PORT" "$HOST" "${ARGO_DOMAIN}" "${ARGO_AUTH}") | |
echo "远程命令执行结果:$output" | |
else | |
echo "🎉恭喜!✅检测到所有进程正常运行中 " | |
echo "配置显示如下:" | |
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" \ | |
"cat domains/\$(whoami).serv00.net/logs/list.txt; \ | |
echo '===================================================='; \ | |
echo 'Clash-meta订阅配置文件:'; \ | |
cat domains/\$(whoami).serv00.net/logs/clash_meta.yaml; \ | |
echo '===================================================='; \ | |
echo 'Sing-box订阅配置文件:'; \ | |
cat domains/\$(whoami).serv00.net/logs/sing_box.json; \ | |
echo '===================================================='" | |
fi | |
else | |
echo "====================================================" | |
echo "💥杯具!❌第【$count】台服务器连接失败!🚀服务器地址:$HOST ,账户名:$SSH_USER" | |
echo "⚠️可能账号名、密码、服务器名称输入错误,或者当前服务器在维护中" | |
echo "====================================================" | |
fi | |
done |