应用管理

1. 微应用管理规范

1.1. 微应用安装

需要指定安装路径,这个安装路径可能包括配置文件放哪里,可执行程序放哪里,也可能还有些文件夹需要提前创建,也有些需要提前做的工作,不是简单的几个字段可以描述清楚的。所以我们需要微应用的开发者提供安装脚本: install.sh

1.2. 微应用启动

一般程序启动可能需要带些参数,比如指定配置文件路径,或者其他,加入是个jar包,那可能就需要用java虚拟机启动了。也是个比较复杂的操作,所以,我们需要微应用的开发者提供启动脚本,start.sh

1.3. 微应用停止

在一个微应用需要停止的时候,我们直接将微应用的进程kill 掉是非常不文明的做法。因为他可能有一些收尾工作需要做。所以由微应用的开发者提供一个停止脚本stop.sh是非常合理的

1.4. 微应用卸载

由于不知道微应用在安装的时候到底在什么地方放了些什么文件,那么我们还是需要开发者提供一个 uninstall.sh的脚本,便于将微应用清理干净。

1.5. 微应用升级

如果只是stop -> uninstall -> install -> start ,那么就没什么问题了。如果不是的话,最好能给个升级脚本。

另外,因为我们想要监控微应用是否正常工作的话,由微应用的开发者提供一个 check_state.sh的脚本来判断运行状态是最好的解决方案,否则,我们只能去判断相关的进程是否存活了。

最后,能再给个获取当前微应用版本的脚本get_version.sh那就更完美了。

嗯,把这些脚本,以及微应用的可执行文件,以及相关的配置文件打包压缩,微应用的管理才能够跑的更加丝滑。

为了保证我们能够成功解压,那么请参考接下来的打包说明:

1.6. 微应用安装包格式规定

自定义安装包,自定义安装包只支持tar 打包,不支持zip以及其他打包工具,打包应用的命令统一为:

tar -czvf DataCenter.tar.gz DataCenter/

统一使用gzip的compress方式,暂不支持xz的compress

应用目录树结构示例:

DataCenter
├── bin
│   ├── DataCenter
│   ├── egw_config.json
│   └── egw_db-20210707.db
├── daemon.conf
├── get_version.sh
├── lib
│   ├── PATCHpaho-mqtt3a.so
│   ├── PATCHpaho-mqtt3a.so.1
│   ├── PATCHpaho-mqtt3a.so.1.3.6
│   ├── PATCHpaho-mqtt3c.so
│   ├── PATCHpaho-mqtt3c.so.1
│   └── PATCHpaho-mqtt3c.so.1.3.6
├── logrotate.conf
├── rsyslog.conf
├── install.sh
├── start.sh
├── stop.sh
├── check_state.sh
└── uninstall.sh

1.7 脚本说明及示例:

start.sh,stop.sh,install.sh, uninstall.sh, check_state.sh为必不可少脚本,由应用开发人员自己封装。

脚本权限需更改为rwx(可读可写可执行),若无特殊限定在应用打包前可使用chmod 777 start.sh将 start.sh的权限设定为-rwxrwxrwx。

现以openwrt ssh服务的dropbear进行相关脚本示例:

start.sh 示例

#!/bin/bash
APPNAME=dropbear
APP_PID=ps -ef |grep $APPNAME |grep -v "grep" |awk '{printf "%s ",$2}'
if [ "$APP_PID" ]; then
  echo "$APNAME already started..."
else
  /usr/sbin/dropbear -F -P /var/run/dropbear.1.pid -g -p 35520 -K 300 -T 3
fi

stop.sh 示例

Bash
#!/bin/bash
APPNAME=dropbear
APP_PID=ps -ef |grep $APPNAME |grep -v "grep" |awk '{printf "%s ",$2}'
if [ "$APP_PID" ]; then
kill -9 $APP_PID
fi

check_state.sh 示例

Bash
#!/bin/bash
APPNAME=dropbear
APP_PID=ps -ef |grep $APPNAME |grep -v "grep" |awk '{printf "%s ",$2}'
if [ "$APP_PID" ]; then
echo "running"
else
echo "stopped"
fi

1.8 补充说明:

上述示例只为一个example, 如何获取本应用运行的pid由应用开发人员自己来定。

如果使用kill -9来停止应用时,请确保APPNAME唯一性,不会kill其他应用进程,如APPNAME 不可以单纯为python,这样会杀掉所有python相关进程。应用开发人员若用kill来停掉进程时,请确保grep $filter 中$filter为该应用唯一的过滤条件。

check_state.sh用来检测app是否正常运行,由开发人员提供本应用运行状态检测。若为运行状态,将"running"输出到标准输出(stdout)。如果为未运行状态,将"stopped"输出到标准输出。网关远程运维管理程序将获取标准输出,以判断该应用运行状态。

2. 微应用管理错误码

公共错误码

错误码
错误描述
解决方案

400

请求消息错误,例如消息格式错误等

404

不支持该操作

429

请求太多

500

服务端内部错误,由应用定义

业务错误码

错误码
错误描述
解决方案

50x – 51x

为App相关指令执行失败的错误码

501

为App文件下载失败状态码

下载链接错误或者网络故障导致文件未下载完成

502

为App文件校验失败状态码

文件下载完成,但执行校验时不匹配,导致校验不通过

503

为App文件解压缩失败,文件未安装规定进行压缩发布

504

为App 安装失败状态码

505

为App 启动失败状态码

506

为App 停止失败状态码

507

为App 重启失败状态码

508

为获取App运行状态失败状态码

一般发生在app应用提供的状态检测脚本不正确

509

为App卸载失败状态码

最后更新于