全部产品
云市场

安装后脚本

更新时间:2019-04-08 11:31:07

使用场景

  • 选择标准系统镜像创建E-HPC集群后,安装自定义的软件,或者配置软件环境;
  • 选择自定义镜像创建E-HPC集群后,执行自定义脚本配置软件环境;
  • 选择云市场镜像创建E-HPC集群后,执行云市场镜像指定的初始化脚本。

使用方法

控制台上创建集群,在“软件配置”页,点开“高级配置”项,在底部“安装后脚本”输入框中,填入需要在集群安装后执行的自定义脚本下载地址(支持http/https协议下载,推荐存放脚本到oss公开可读bucket),以及执行参数。

支持包含bash、python等可以在 Linux Shell 环境中运行的脚本类型,脚本第一行务必加上注解指明运行时调用的命令,例如 bash 脚本第一行为 “#!/bin/bash”。

云市场镜像附带的初始化脚本,由镜像提供商注册到E-HPC后台,普通用户无需填写。

如果使用附带初始化脚本的云市场镜像创建E-HPC集群,用户同时指定了自定义的安装后脚本,则执行顺序是,先执行云市场镜像附带的初始化脚本,再执行用户自定义的安装后脚本。

执行时机

集群所有节点启动并安装好必要的软件后,将下载安装后脚本,在集群所有节点上执行一次。此时集群的调度器、域账号等服务都已就绪,登录节点可以连接。

异常处理

  • 如果集群创建过程中出现异常,导致集群创建失败,则不会继续执行安装后脚本;
  • 如果集群创建成功,但是单个计算节点异常,该异常节点上不会执行安装后脚本;
  • 后台根据用户脚本的返回值决定是否执行成功,返回值约定同Shell,非0代表失败;
  • 如果集群创建成功,但是执行安装后脚本失败,将在“操作日志”界面给出警告,集群状态仍保持“运行中”。详细错误信息请登录集群,在执行失败的节点 /root 目录下查询日志文件。

可利用的环境变量

自定义安装后脚本默认将在集群的所有节点上执行,用户通常需要根据节点的角色(是否调度器节点、计算节点或者登录节点),来决定具体执行的操作,执行脚本过程中可能需要集群的某些元数据。这些信息作为环境变量,可在脚本的运行时获取。

可用环境变量如下(所有变量类型为字符串):

变量名 取值 说明
ClusterId 集群ID
HOSTNAME 主机名
AccountType NIS / LDAP 域账号类型
SchedulerType PBS / SLURM / GRIDENGINE 调度器类型
Role AccountManager / AccountManagerBackup / ResourceManager / ResourceManagerBackup / ComputeNode / LoginNode Role为单一角色名称或者多个角色名称以逗号分隔组成字符串。即单个节点可能同时具有多种角色。
ResourceManagerIp 主调度器私网IP
ResourceManagerHost 主调度器主机名
AccountManagerIp 主域服务器私网IP
AccountManagerHost 主域服务器主机名
ResourceManagerBackupIp 备用调度器私网IP(开启HA)
ResourceManagerBackupHost 备用调度器主机名(开启HA)
AccountManagerBackupIp 备用域服务器私网IP(开启HA)
AccountManagerBackupHost 备用域服务器主机名(开启HA)
isLoginNode true / false 是否登录节点
isAccountManager true / false 是否主域服务器
isResourceManager true / false 是否主调度器
isAccountManagerBackup true / false 是否备用域服务器
isResourceManagerBackup true / false 是否备用调度器
isComputeNode true / false 是否计算节点

安装后脚本示例

示例下载地址:http://public-ehs.oss-cn-hangzhou.aliyuncs.com/scripts/postscript_example.sh

  1. #!/bin/bash
  2. echo "call $0 with param: $@" | tee /root/command.log
  3. ## show all availble environment variables
  4. printenv | tee /root/env.log
  5. ## Cluster meta data
  6. echo "ClusterId: ${ClusterId}" | tee /root/cluster.log
  7. echo "AccountType: ${AccountType}, SchedulerType: ${SchedulerType}" | tee -a /root/cluster.log
  8. ## Role of current machine
  9. echo "${Role}" | tee /root/role.log
  10. if [ "${isLoginNode}" == "true" ]; then
  11. ## Do your work on login node
  12. echo "This is login node" | tee -a /root/role.log
  13. exit $?
  14. fi
  15. if [ "${isAccountManager}" == "true" ]; then
  16. ## Do your work on NIS/LDAP master
  17. echo "This is account manager" | tee -a /root/role.log
  18. exit $?
  19. fi
  20. if [ "${isResourceManager}" == "true" ]; then
  21. ## Do your work on Slurm/PBS master
  22. echo "This is scheduler" | tee -a /root/role.log
  23. exit $?
  24. fi
  25. if [ "${isComputeNode}" == "true" ]; then
  26. ## Do your work with on compute node
  27. echo "This is compute node" | tee -a /root/role.log
  28. exit $?
  29. fi