1Panel 批量操作:一条命令库,下发到整组主机
1Panel 批量操作:一条命令库,下发到整组主机
【免费下载链接】1Panel🔥 1Panel is a modern, open-source Linux server management panel and a lightweight AI management platform.项目地址: https://gitcode.com/GitHub_Trending/1p/1Panel
凌晨两点,你第 9 次在终端里敲下同一条重启命令。命令没变,变的是机器——6 台生产机、同一个发版动作、同一批日志清理,你的手速没问题,是工具把"一批"当成了"六台单独做"。1Panel 的批量操作把这件事反过来:先把主机归拢成组,再给命令建库,多服务器管理就从逐台登录,变成"选组、选命令、确认"三步。
把散落的主机归拢到同一个组
主机入口在 frontend/src/views/terminal/host/index.vue:点"添加主机"逐台录入地址与凭据,保存后列表顶部就是分组筛选框。真正省事的是改组动作——每行主机的分组列可以内联切换,一台机器从"生产"挪到"预发",不用重建,改个下拉就行。
组的增删改查逻辑在 core/app/service/group.go 里,两处细节值得留意:建组时先查重名,重了直接拒绝;删组时如果组里还挂着命令,会直接报错拒删,只有把组内命令迁到默认组之后才放行。误点删除,命令不会变孤儿。
把要重复敲的命令写成一次性的资产
主机进组之后,省时间的下一环是命令。命令维护页 frontend/src/views/terminal/command/index.vue 支持创建"名称 + 命令体",并挂到任意组下。这是多服务器管理的分水岭:命令不再散落在聊天记录和你的记忆里,而是变成可检索、可复用的条目。后端 core/app/service/command.go 在创建时做名称查重,更新时允许改命令体、换组——发现命令写错了,改库这一条即可,不用回头逐台纠正。
为什么命令库要按组挂
命令攒到两位数,平铺列表肉眼找已经很慢了。SearchForTree方法把命令列表和组列表拼成两层树:第一层是组名,第二层是组内命令,空组自动丢弃,界面上看到的就是"组 → 命令"的结构化视图。
三步把一条命令下发到整组主机
① 进主机页,顶部分组筛选框选定目标组,确认这一批要碰哪几台机器。 ② 切到命令管理页,从分组树里挑好命令,点击执行并勾选组内主机。 ③ 回看每台机器的执行结果——成功、失败分开列,失败的只需单独补跑,不用整批重来。
分组树的核心逻辑就一个循环:
for _, group := range groups { data.Label = group.Name for _, cmd := range cmdList { if cmd.GroupID == group.ID { data.Children = append(data.Children, dto.CommandTree{Label: cmd.Name, Value: cmd.Command}) } } if len(data.Children) != 0 { lists = append(lists, data) } }先按组开坑,再把命令填进对应的坑,空组直接跳过——这就是"选命令像翻目录"的由来。
命令库本身也可以导出
换机重建命令库是最容易让人放弃维护这件事的原因。core/app/service/command.go 里的Export方法会把全部命令写成带时间戳的 CSV,落在安装目录下的1panel/tmp/export/commands,命令页上有现成的导入入口。老机器上用了几个月的命令库,十分钟就能在新实例复刻一遍。下次需要批量发命令时,先建组——它比逐台登录快一个量级。
【免费下载链接】1Panel🔥 1Panel is a modern, open-source Linux server management panel and a lightweight AI management platform.项目地址: https://gitcode.com/GitHub_Trending/1p/1Panel
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
