✨ 支持`docker`部署`archlinux`,预装`clang`跨平台编译工具链
This commit is contained in:
@@ -0,0 +1,288 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "=========================================="
|
||||
echo " Gitea Runner Management Tool "
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 函数:列出所有 runners
|
||||
list_runners() {
|
||||
echo "Registered Runners:"
|
||||
echo "-------------------------------------------"
|
||||
|
||||
if [ ! -d "/data/runners" ] || [ -z "$(ls -A /data/runners 2>/dev/null)" ]; then
|
||||
echo "No runners registered yet."
|
||||
return
|
||||
fi
|
||||
|
||||
printf "%-20s %-15s %-30s\n" "Name" "Status" "Log File"
|
||||
echo "-------------------------------------------"
|
||||
|
||||
for runner_dir in /data/runners/*/; do
|
||||
if [ -d "$runner_dir" ]; then
|
||||
runner_name=$(basename "$runner_dir")
|
||||
|
||||
if [ -f "$runner_dir/.runner" ]; then
|
||||
# 获取状态
|
||||
status=$(supervisorctl status "runner-${runner_name}" 2>/dev/null | awk '{print $2}')
|
||||
[ -z "$status" ] && status="NOT_LOADED"
|
||||
|
||||
log_file="/var/log/supervisor/runner-${runner_name}.out.log"
|
||||
|
||||
printf "%-20s %-15s %-30s\n" "$runner_name" "$status" "$log_file"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 函数:查看 runner 详细信息
|
||||
show_runner() {
|
||||
local runner_name=$1
|
||||
local runner_dir="/data/runners/${runner_name}"
|
||||
|
||||
if [ ! -d "$runner_dir" ]; then
|
||||
echo "✗ Runner '$runner_name' not found!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Runner Details: $runner_name"
|
||||
echo "-------------------------------------------"
|
||||
echo "Directory: $runner_dir"
|
||||
|
||||
if [ -f "$runner_dir/config.yaml" ]; then
|
||||
echo ""
|
||||
echo "Configuration:"
|
||||
cat "$runner_dir/config.yaml"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Status:"
|
||||
supervisorctl status "runner-${runner_name}" 2>/dev/null | awk '{print $2}'
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 函数:删除 runner
|
||||
delete_runner() {
|
||||
local runner_name=$1
|
||||
local runner_dir="/data/runners/${runner_name}"
|
||||
|
||||
if [ ! -d "$runner_dir" ]; then
|
||||
echo "✗ Runner '$runner_name' not found!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "⚠ Warning: This will permanently delete runner '$runner_name'"
|
||||
read -p "Are you sure? (y/N): " -n 1 -r
|
||||
echo
|
||||
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "Deletion cancelled."
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "Stopping runner..."
|
||||
supervisorctl stop "runner-${runner_name}" 2>/dev/null || true
|
||||
|
||||
echo "Removing configuration..."
|
||||
rm -f "/etc/supervisor/conf.d/runner-${runner_name}.conf"
|
||||
|
||||
echo "Deleting runner directory..."
|
||||
rm -rf "$runner_dir"
|
||||
|
||||
echo "Updating supervisor..."
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
|
||||
echo ""
|
||||
echo "✓ Runner '$runner_name' deleted successfully!"
|
||||
}
|
||||
|
||||
# 函数:查看 runner 日志
|
||||
logs_runner() {
|
||||
local runner_name=$1
|
||||
local lines=${2:-50}
|
||||
|
||||
local log_file="/var/log/supervisor/runner-${runner_name}.out.log"
|
||||
|
||||
if [ ! -f "$log_file" ]; then
|
||||
echo "✗ Log file not found for runner '$runner_name'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Showing last $lines lines of '$runner_name' logs:"
|
||||
echo "-------------------------------------------"
|
||||
tail -n "$lines" "$log_file"
|
||||
}
|
||||
|
||||
# 函数:实时查看日志
|
||||
follow_logs() {
|
||||
local runner_name=$1
|
||||
local log_file="/var/log/supervisor/runner-${runner_name}.out.log"
|
||||
|
||||
if [ ! -f "$log_file" ]; then
|
||||
echo "✗ Log file not found for runner '$runner_name'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Following logs for '$runner_name' (Press Ctrl+C to exit):"
|
||||
echo "-------------------------------------------"
|
||||
tail -f "$log_file"
|
||||
}
|
||||
|
||||
# 函数:启动/停止/重启 runner
|
||||
control_runner() {
|
||||
local action=$1
|
||||
local runner_name=$2
|
||||
|
||||
case $action in
|
||||
start|stop|restart)
|
||||
echo "${action^}ing runner '$runner_name'..."
|
||||
supervisorctl "$action" "runner-${runner_name}"
|
||||
;;
|
||||
*)
|
||||
echo "✗ Invalid action: $action"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 函数:显示所有 runner 状态
|
||||
status_all() {
|
||||
echo "All Runners Status:"
|
||||
echo "-------------------------------------------"
|
||||
supervisorctl status | grep "^runner-" || echo "No runners running."
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 主菜单
|
||||
show_menu() {
|
||||
echo "Choose an action:"
|
||||
echo " 1) List all runners"
|
||||
echo " 2) Show runner details"
|
||||
echo " 3) Add new runner"
|
||||
echo " 4) Delete runner"
|
||||
echo " 5) Start runner"
|
||||
echo " 6) Stop runner"
|
||||
echo " 7) Restart runner"
|
||||
echo " 8) View runner logs"
|
||||
echo " 9) Follow runner logs (real-time)"
|
||||
echo " 10) Show all runners status"
|
||||
echo " 0) Exit"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 主程序
|
||||
if [ $# -eq 0 ]; then
|
||||
# 交互模式
|
||||
while true; do
|
||||
show_menu
|
||||
read -p "Enter your choice: " choice
|
||||
echo ""
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
list_runners
|
||||
;;
|
||||
2)
|
||||
read -p "Enter runner name: " runner_name
|
||||
show_runner "$runner_name"
|
||||
;;
|
||||
3)
|
||||
echo "Starting registration process..."
|
||||
/data/register.sh
|
||||
;;
|
||||
4)
|
||||
read -p "Enter runner name to delete: " runner_name
|
||||
delete_runner "$runner_name"
|
||||
;;
|
||||
5)
|
||||
read -p "Enter runner name to start: " runner_name
|
||||
control_runner start "$runner_name"
|
||||
;;
|
||||
6)
|
||||
read -p "Enter runner name to stop: " runner_name
|
||||
control_runner stop "$runner_name"
|
||||
;;
|
||||
7)
|
||||
read -p "Enter runner name to restart: " runner_name
|
||||
control_runner restart "$runner_name"
|
||||
;;
|
||||
8)
|
||||
read -p "Enter runner name: " runner_name
|
||||
read -p "Number of lines (default 50): " lines
|
||||
logs_runner "$runner_name" "${lines:-50}"
|
||||
;;
|
||||
9)
|
||||
read -p "Enter runner name: " runner_name
|
||||
follow_logs "$runner_name"
|
||||
;;
|
||||
10)
|
||||
status_all
|
||||
;;
|
||||
0)
|
||||
echo "Goodbye!"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Invalid choice!"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
read -p "Press Enter to continue..."
|
||||
clear
|
||||
done
|
||||
else
|
||||
# 命令行模式
|
||||
case $1 in
|
||||
list|ls)
|
||||
list_runners
|
||||
;;
|
||||
show|info)
|
||||
show_runner "$2"
|
||||
;;
|
||||
add|register)
|
||||
/data/register.sh
|
||||
;;
|
||||
delete|rm|remove)
|
||||
delete_runner "$2"
|
||||
;;
|
||||
start)
|
||||
control_runner start "$2"
|
||||
;;
|
||||
stop)
|
||||
control_runner stop "$2"
|
||||
;;
|
||||
restart)
|
||||
control_runner restart "$2"
|
||||
;;
|
||||
logs)
|
||||
logs_runner "$2" "${3:-50}"
|
||||
;;
|
||||
follow)
|
||||
follow_logs "$2"
|
||||
;;
|
||||
status)
|
||||
status_all
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 [command] [runner_name]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " list - List all runners"
|
||||
echo " show <name> - Show runner details"
|
||||
echo " add - Add new runner"
|
||||
echo " delete <name> - Delete a runner"
|
||||
echo " start <name> - Start a runner"
|
||||
echo " stop <name> - Stop a runner"
|
||||
echo " restart <name> - Restart a runner"
|
||||
echo " logs <name> [lines] - View runner logs"
|
||||
echo " follow <name> - Follow runner logs (real-time)"
|
||||
echo " status - Show all runners status"
|
||||
echo ""
|
||||
echo "Or run without arguments for interactive mode."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
Reference in New Issue
Block a user