24|管理进程:如何设计完善的运行命令?
叶剑峰
该思维导图由 AI 生成,仅供参考
你好,我是轩脉刃。
在第 13 章我们引入命令行的时候,将 Web 启动方式改成了一个命令行。但是当时只完成了一个最简单的启动 Web 服务的命令,这节课,我们要做的是完善这个 Web 服务运行命令,让 Web 服务的运行有完整的启动、停止、重启、查询的进程管理功能。
这套完整的进程管理功能,能让应用管理者非常方便地通过一套命令来统一管控一个应用,降低应用管理者的管理成本,后续也能为实现应用自动化部署到远端服务的工具提供了基础。下面我们来具体看下如何设计这套命令并且实现它吧。
运行命令的设计
首先照惯例需要设计一下运行命令,一级命令为 app,二级命令设计如下:
./hade app start 二级命令,启动一个 app 服务
./hade app state 二级命令,获取启动的 app 的信息
./hade app stop 二级命令,停止已经启动的 app 服务
./hade app restart 二级命令,重新启动一个 app 服务
这四个二级命令,有 app 服务的启动、停止、重启、查询,基本上已经把一个 app 服务启动的状态变更都包含了,能基本满足后面我们对于一个应用的管理需求。下面来讨论下每个命令的功能和设计。
启动命令
首先是 start 这个命令,写在 framework/command/app.go 中。我们先分析下参数。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何设计完善的运行命令来管理Web服务的进程。作者首先设计了四个二级命令,包括启动、查询、停止和重启Web服务的功能。在启动命令的设计中,作者详细讨论了获取参数、确认目录和文件存在、以及启动服务的逻辑。特别是针对daemon方式启动的问题,作者使用了go-daemon库来实现子进程的启动。此外,还介绍了如何使用第三方库来自定义进程名称。文章还详细讨论了获取进程PID、停止命令和重启命令的实现步骤,包括如何根据PID查询进程是否存在、发送信号关闭进程、以及确认进程已关闭后启动新进程的逻辑。整体而言,本文对于需要了解如何设计和实现进程管理功能的读者具有一定的参考价值。文章还提出了一个思考题,探讨了使用不同地址格式的区别,为读者提供了进一步思考的空间。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- kkxue使用了syscall包,windows上就没法编译了吧
作者回复: 是的,这个是一个问题,但是其实目前docker化比较流行,对平台的依赖其实没有那么重了
2021-11-18 - Geek_6d3ca8好像"github.com/erikdubbelboer/gspt"和github.com/sevlyar/go-daemon在 m1 上跑不起来 ./hade app start --daemon=true Error: daemon: Resource temporarily unavailable Usage:2023-08-29归属地:英国
- 宙斯为什么不把closeWait直接定义为2*closeWait值呢2021-11-142
收起评论