--- description: List all configured Gitea runners and their status --- # gitea-list-runners 列出所有已配置的 Gitea Runners 及其运行状态。 ## Features - 显示所有已配置的 runner - 检查 runner 运行状态(运行中/已停止) - 显示 runner 配置信息(labels、capacity 等) - 显示 runner ID 和名称 - 提供启动命令 ## Steps ### 1. Check Configuration ```bash config_dir="$HOME/.config/gitea" runners_dir="$config_dir/runners" if [ ! -d "$runners_dir" ]; then echo "❌ 未找到 runner 目录" echo "请先创建 runner" exit 1 fi ``` ### 2. List All Runners ```bash echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Gitea Runners" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" runners=$(ls -1 "$runners_dir" 2>/dev/null) if [ -z "$runners" ]; then echo "未配置任何 runner" echo "" echo "创建 runner:" echo " /gitea-create-runner" exit 0 fi runner_count=$(echo "$runners" | wc -l | tr -d ' ') echo "总计: $runner_count 个 runner" echo "" ``` ### 3. Display Each Runner's Status ```bash for runner in $runners; do runner_dir="$runners_dir/$runner" config_file="$runner_dir/config.yaml" echo "[$runner]" # Check if config exists if [ ! -f "$config_file" ]; then echo " ⚠️ 配置文件缺失" echo "" continue fi # Check if runner process is running if pgrep -f "act_runner daemon --config $config_file" > /dev/null; then status="🟢 运行中" pid=$(pgrep -f "act_runner daemon --config $config_file") else status="🔴 已停止" pid="-" fi echo " 状态: $status" echo " PID: $pid" # Display configuration info if command -v yq &> /dev/null; then # Use yq if available capacity=$(yq eval '.runner.capacity' "$config_file" 2>/dev/null) timeout=$(yq eval '.runner.timeout' "$config_file" 2>/dev/null) else # Fallback to grep capacity=$(grep "capacity:" "$config_file" | awk '{print $2}') timeout=$(grep "timeout:" "$config_file" | awk '{print $2}') fi echo " 容量: ${capacity:-N/A}" echo " 超时: ${timeout:-N/A}" # Display labels labels=$(grep -A 10 "labels:" "$config_file" | grep "^ -" | sed 's/^ - "//' | sed 's/"$//' | tr '\n' ',' | sed 's/,$//') if [ -n "$labels" ]; then echo " Labels: $labels" fi # Display runner info from .runner file if [ -f "$runner_dir/.runner" ]; then if command -v jq &> /dev/null; then runner_id=$(jq -r '.id // "N/A"' "$runner_dir/.runner" 2>/dev/null) runner_name=$(jq -r '.name // "N/A"' "$runner_dir/.runner" 2>/dev/null) echo " ID: $runner_id" echo " 名称: $runner_name" fi fi echo " 路径: $runner_dir" # Display start command echo "" echo " 启动命令:" echo " act_runner daemon --config $config_file" # Display background start command if [ "$status" = "🔴 已停止" ]; then echo "" echo " 后台启动:" echo " nohup act_runner daemon --config $config_file > $runner_dir/runner.log 2>&1 &" fi echo "" done ``` ### 4. Display Summary Commands ```bash echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "管理命令" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " 查看配置: /gitea-config" echo " 创建 runner: /gitea-create-runner" echo " 删除 runner: /gitea-delete-runner" echo "" ``` ## Output Example ``` ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Gitea Runners ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 总计: 2 个 runner [runner-macbook-pro] 状态: 🟢 运行中 PID: 12345 容量: 2 超时: 3h Labels: self-hosted:host,macOS:host,ARM64:host,darwin-arm64:host ID: 42 名称: runner-macbook-pro 路径: /Users/voson/.config/gitea/runners/runner-macbook-pro 启动命令: act_runner daemon --config /Users/voson/.config/gitea/runners/runner-macbook-pro/config.yaml [runner-mac-mini] 状态: 🔴 已停止 PID: - 容量: 2 超时: 3h Labels: self-hosted:host,macOS:host,ARM64:host,darwin-arm64:host ID: 43 名称: runner-mac-mini 路径: /Users/voson/.config/gitea/runners/runner-mac-mini 启动命令: act_runner daemon --config /Users/voson/.config/gitea/runners/runner-mac-mini/config.yaml 后台启动: nohup act_runner daemon --config /Users/voson/.config/gitea/runners/runner-mac-mini/config.yaml > /Users/voson/.config/gitea/runners/runner-mac-mini/runner.log 2>&1 & ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 管理命令 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 查看配置: /gitea-config 创建 runner: /gitea-create-runner 删除 runner: /gitea-delete-runner ``` ## Notes - 使用 `pgrep` 检查进程状态 - 优先使用 `yq` 解析 YAML,fallback 到 `grep` - 优先使用 `jq` 解析 JSON `.runner` 文件 - Runner 状态图标: - 🟢 运行中 - 🔴 已停止 - ⚠️ 配置异常 - 显示启动命令方便用户复制执行 - 对已停止的 runner,额外显示后台启动命令