289 lines
7.7 KiB
Bash
289 lines
7.7 KiB
Bash
#!/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
|