在应用生命周期中,会发生各种事件,如启动、停止等。EDAS提供了当发生事件时,在ECS实例上执行用户自定义脚本的能力。

挂载脚本定义说明

生命周期挂载脚本的运行过程图示意如下:

挂载脚本运行过程图

脚本执行须知:

  • 脚本采用root用户执行。
  • 脚本执行时间最长为60s,当执行时间超过60s,将认为超时导致脚本执行失败。
  • 脚本可能被重复执行,需要脚本自身保证重复执行的正确性,例如:脚本应避免将相同的配置项追加到同一配置文件。
  • 脚本在独立的进程中执行,与应用进程无关。
  • 如需设置环境变量在应用启动后使用,建议将环境变量写入到 /home/admin/.bashrc中。
  • 脚本通过ECS的 发送远程命令执行,命令名称为 CoCustomHookScript
  • 执行结果状态:
    • 成功:按照Linux、Unix的标准,执行退出码为 0 时为成功。如命令 echo xyz退出码为 0。
    • 失败:执行退出码非 0 时为失败。如命令 ls 不存在的目录,退出码非 0。
  • 忽略失败:开启时,若 执行结果状态 失败,则不中断应用变更单的执行。
  • 不忽略失败:当脚本执行失败并且健康检查URL通过时,挂载脚本将被重复执行。您可通过以下方法继续执行应用变更:
    • 修复相应的脚本问题,然后重试变更任务。
    • 若是启动后挂载脚本,可在变更任务单击 略过,挂载脚本在这个变更单任务执行时,将采用 忽略失败模式,变更记录将继续执行。
  • 允许输入的脚本最大 8KB,若超过,可将脚本放置于外部存储,如 OSS 存储服务中,通过网络下载后执行。

设置挂载脚本

您可参照以下步骤进入到挂载脚本的设置页面。

  1. 登录EDAS控制台
  2. 在左侧导航栏中选择应用管理 > 应用列表,在应用列表页面单击具体的应用名称。
  3. 进入应用或应用分组设置页面。
    • 应用:在基本信息页面的应用设置区域的左上角单击挂载脚本
    • 应用分组:选择实例部署信息页签,在分组设置的下拉列表中选择挂载脚本
  4. 挂载脚本对话框单击展开需设置的应用生命周期的脚本,在文本框中输入脚本内容,然后单击 修改
    挂在脚本配置
    参数 描述
    准备实例脚本 在ECS实例扩容到应用中时发生一次。通常可用于设置应用相关的环境变量、hosts等。相比于cloud-init在虚拟机初始化阶段触发,进一步提供了跟应用相关的触发点。
    销毁实例脚本 ECS实例从应用移除时发生一次。通常可用于移除应用相关的配置等。
    启动前脚本 通过变更触发的应用启动,在应用容器每次启动前,如调用Tomcat的启动脚本start.sh之前。
    启动后脚本 通过变更触发的应用启动,在应用容器每次启动后,如调用Tomcat的启动脚本start.sh之后。具体触发点为:当应用配置了健康检查URL时,则通过健康检查后触发;若没有配置健康检查URL,则在端口存在后触发,不建议只使用端口检查方式,通常在应用未完全启动前,应用容器早已经打开网络端口。
    停止前脚本 通过变更触发的应用停止,在应用容器每次停止前。
    停止后脚本 通过变更触发的应用停止,在应用容器每次停止后。

查看挂载脚本执行结果

在修改挂载脚本后,您可查看应用变更。下图以执行准备实例脚本为例展示执行结果。

准备实例脚本

常见问题

怎么查找发送远程命令的执行状态?

在变更记录日志中的InvocationId可查找到相应的发送远程命令的命令执行状态。