116 lines
4.3 KiB
Bash
Executable File
116 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 远程服务器列表,按需修改
|
||
SERVERS=("175.178.54.98" "1.12.218.143" "43.139.169.25" "129.204.180.174" "42.194.142.169")
|
||
REMOTE_USER="ubuntu"
|
||
REMOTE_SCRIPT_DIR="/home/ubuntu/pyscripts/stockapp/reports_em"
|
||
REMOTE_LOG_DIR="/home/ubuntu/pyscripts/stockapp/log"
|
||
DATA_DIR="/home/ubuntu/hostdir/stock_data/pdfs"
|
||
LOCAL_FILES=("config.py" "em_reports.py" "fetch.py")
|
||
|
||
# 远程任务参数配置(每台服务器的不同参数)
|
||
TASK_PARAMS=(
|
||
"--mode=down --begin=2024-01-01 --end=2024-06-30"
|
||
"--mode=down --begin=2023-01-01 --end=2023-06-30"
|
||
"--mode=down --begin=2022-01-01 --end=2022-06-30"
|
||
"--mode=down --begin=2021-01-01 --end=2021-06-30"
|
||
"--mode=down --begin=2020-01-01 --end=2020-06-30"
|
||
)
|
||
|
||
# 推送代码到所有服务器
|
||
function push_code() {
|
||
for SERVER in "${SERVERS[@]}"; do
|
||
echo "Pushing code to $SERVER..."
|
||
scp "${LOCAL_FILES[@]}" "$REMOTE_USER@$SERVER:$REMOTE_SCRIPT_DIR/"
|
||
done
|
||
}
|
||
|
||
# 启动任务
|
||
function start_tasks() {
|
||
for i in "${!SERVERS[@]}"; do
|
||
SERVER="${SERVERS[$i]}"
|
||
PARAMS="${TASK_PARAMS[$i]}"
|
||
echo "Starting task on $SERVER with params: $PARAMS"
|
||
#ssh "$REMOTE_USER@$SERVER" "cd $REMOTE_SCRIPT_DIR && nohup python3 ./fetch.py $PARAMS > ../log/nohup.log 2>&1 &"
|
||
#ssh "$REMOTE_USER@$SERVER" "cd $REMOTE_SCRIPT_DIR && nohup python3 ./fetch.py $PARAMS > ../log/nohup.log 2>&1 < /dev/null & disown"
|
||
# nohup ... < /dev/null:防止 nohup 等待 stdin,立即释放控制权。
|
||
# & disown:确保进程与 SSH 彻底分离,避免 SIGHUP 信号影响,SSH 立即返回。
|
||
# ssh -n:禁用 ssh 的 stdin,防止远程进程等待输入。
|
||
ssh -n "$REMOTE_USER@$SERVER" "cd $REMOTE_SCRIPT_DIR && nohup python3 ./fetch.py $PARAMS > ../log/nohup.log 2>&1 < /dev/null & disown"
|
||
done
|
||
}
|
||
|
||
# 停止任务
|
||
function stop_tasks() {
|
||
for SERVER in "${SERVERS[@]}"; do
|
||
echo "Stopping task on $SERVER..."
|
||
ssh "$REMOTE_USER@$SERVER" "pkill -f 'python3 ./fetch.py'"
|
||
done
|
||
}
|
||
|
||
# 获取任务进度
|
||
function check_progress() {
|
||
for SERVER in "${SERVERS[@]}"; do
|
||
echo -e "\nChecking progress on $SERVER..."
|
||
FILE_COUNT=$(ssh "$REMOTE_USER@$SERVER" "ls -lRh $DATA_DIR | grep pdf | wc -l")
|
||
FILE_SIZE=$(ssh "$REMOTE_USER@$SERVER" "du -sh $DATA_DIR")
|
||
PROCESS_COUNT=$(ssh "$REMOTE_USER@$SERVER" "ps aux | grep '[f]etch.py' | wc -l")
|
||
|
||
if [ "$PROCESS_COUNT" -gt 0 ]; then
|
||
echo "Process status: Running ($PROCESS_COUNT instances), if 2, include parent progress"
|
||
else
|
||
echo "Process status: Not running"
|
||
fi
|
||
|
||
echo "Total files: $FILE_COUNT"
|
||
echo "Total size : $FILE_SIZE"
|
||
|
||
ERROR_LINES=$(ssh "$REMOTE_USER@$SERVER" "grep -v INFO $REMOTE_LOG_DIR/fetch_202503* | wc -l")
|
||
echo "Error lines: $ERROR_LINES"
|
||
|
||
TASK_COUNT=$(ssh "$REMOTE_USER@$SERVER" "grep 'running task. id' ~/pyscripts/stockapp/log/fetch_20250316.log | wc -l")
|
||
echo "Task count: $TASK_COUNT"
|
||
|
||
done
|
||
}
|
||
|
||
# 获取任务进度
|
||
function check_progress_robot() {
|
||
result=""
|
||
for SERVER in "${SERVERS[@]}"; do
|
||
result+="\nChecking progress on $SERVER...\n"
|
||
FILE_COUNT=$(ssh "$REMOTE_USER@$SERVER" "ls -lRh $DATA_DIR | grep pdf | wc -l")
|
||
FILE_SIZE=$(ssh "$REMOTE_USER@$SERVER" "du -sh $DATA_DIR")
|
||
PROCESS_COUNT=$(ssh "$REMOTE_USER@$SERVER" "ps aux | grep '[f]etch.py' | wc -l")
|
||
|
||
if [ "$PROCESS_COUNT" -gt 0 ]; then
|
||
result+="Process status: Running ($PROCESS_COUNT instances), if 2, include parent progress\n"
|
||
else
|
||
result+="Process status: Not running\n"
|
||
fi
|
||
|
||
result+="Total files: $FILE_COUNT\n"
|
||
result+="Total size : $FILE_SIZE\n"
|
||
|
||
ERROR_LINES=$(ssh "$REMOTE_USER@$SERVER" "grep -v INFO $REMOTE_LOG_DIR/fetch_202503* | wc -l")
|
||
result+="Error lines: $ERROR_LINES\n"
|
||
|
||
TASK_COUNT=$(ssh "$REMOTE_USER@$SERVER" "grep 'running task. id' ~/pyscripts/stockapp/log/fetch_20250316.log | wc -l")
|
||
done
|
||
echo -e "$result"
|
||
# 调用 Python 脚本发送消息
|
||
python3 ./robot.py "$result"
|
||
}
|
||
|
||
# 脚本菜单
|
||
case "$1" in
|
||
push) push_code ;;
|
||
start) start_tasks ;;
|
||
stop) stop_tasks ;;
|
||
check) check_progress ;;
|
||
*)
|
||
echo "Usage: $0 {push|start|stop|check}"
|
||
exit 1
|
||
;;
|
||
esac
|