跳转至

RUNBOOK — FlexLM License 服务(Cadence)

服务主机:192.168.31.29(主机名 Flexlm);软件:Flexera lmgrd v11.16.4.0 + cdslmd(Cadence vendor daemon) 服务目录:/opt/FlexLM/Cadence/;变更档案见同目录 SOP.md(现行版本为变更 3:新 floating license 装载) 当前状态:运行中(2026-09-26 22:30 起)

目录

  1. 服务概览
  2. 接入与凭据
  3. 日常速查表
  4. 日常操作
  5. 配置管理
  6. 备份与恢复
  7. 监控与告警
  8. 故障处置
  9. 安全与权限
  10. 容量与性能
  11. 附录

1. 服务概览

为 Cadence 客户端(IC617/Virtuoso、MMSIM 等)发放 floating license 的 FlexLM 许可服务器。

项 内容
组件 lmgrd(license manager,监听 5280)+ cdslmd(Cadence vendor daemon,固定 5281,由 license 的 DAEMON 行 port=5281 指定)
主机 192.168.31.29 / Flexlm,Rocky Linux 9.8,MAC 52:54:00:31:0e:02(= license SERVER 行绑定的 HostID)
依赖 无外部依赖;不依赖 NFS 与 module load
异常影响 服务中断 → 全部客户端无法启动 Cadence 工具(提示找不到 license server)
重要性 高(单点,无冗余)
当前状态 2026-09-26 22:30 起运行中:lmgrd(5280)+cdslmd(5281) 常驻;license 为 /opt/FlexLM/Cadence/cds.license.dat = 2 行头 + 605 条 floating FEATURE(permanent uncounted HOSTID=ANY,版本字段 2100.000,SERVER 行写 IP)。装载过程见 SOP.md 变更 3
已知限制 ① 已由 systemd 托管(flexlm-cadence.service,开机自启 + 异常重启),运维见 ../../../Synopsys/flexlm_systemd_20260928/docs/RUNBOOK.md;② 尚未做真实 checkout(客户端工具未装);③ Calibre/Mentor license 未装载(缺 mgcld,且现有 Calibre license 绑的是别的 MAC,需先解决 MentorKG.exe 运行环境)

2. 接入与凭据

  • 登录:本地 root 免密 SSH 到 root@192.168.31.29(密钥见管理员本机 ~/.ssh/,凭据不入文档)。
  • 客户端接入:已由 modulefile 提供——module load cadence … 自动设置 CDS_LIC_FILE=LM_LICENSE_FILE=5280@192.168.31.29(来源:slurm_ins 的 config/slurm_deploy.yaml)。 非 Lmod 场景手工兜底:
export CDS_LIC_FILE=5280@192.168.31.29
export LM_LICENSE_FILE=5280@192.168.31.29
  • SERVER 行已写 IP(SERVER 192.168.31.29 525400310e02 5280,变更 3 起生效),客户端不再需要解析主机名 Flexlm; 历史上的 lmgrd is not running (-96)(场景 E)由主机名解析失败引起,现已消除。

  • 客户端连通性自检(无需 Cadence 工具):

nc -vz 192.168.31.29 5280     # 预期 succeeded
nc -vz 192.168.31.29 5281     # 预期 succeeded

服务当前运行中,本自检应成功;失败即转 场景 A。

3. 日常速查表

目的 命令
看进程 ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax cdslmd'
看端口 ssh root@192.168.31.29 'ss -lntp \| grep -E ":5280\|:5281"'
看日志尾部 ssh root@192.168.31.29 'tail -30 /opt/FlexLM/Cadence/lmgrd.log'
扫日志错误 ssh root@192.168.31.29 'grep -inE "error\|invalid\|fail\|signature\|denied\|wrong" /opt/FlexLM/Cadence/lmgrd.log \| tail -20'
启动(先归档旧日志) ssh root@192.168.31.29 'cp -p /opt/FlexLM/Cadence/lmgrd.log /root/lmgrd.log.$(date +%Y%m%d-%H%M%S); setsid nohup /opt/FlexLM/Cadence/lmgrd -c /opt/FlexLM/Cadence/cds.license.dat -l /opt/FlexLM/Cadence/lmgrd.log </dev/null >/dev/null 2>&1 &'
停止 ssh root@192.168.31.29 'pkill lmgrd; pkill cdslmd'(lmdown 无执行位,调用会报 Permission denied)
备份 license scp root@192.168.31.29:/opt/FlexLM/Cadence/cds.license.dat ./cds.license.dat.bak.$(date +%Y%m%d-%H%M%S)
看已发许可证数 ssh root@192.168.31.29 'grep -c "OUT:" /opt/FlexLM/Cadence/lmgrd.log'
看防火墙放行 ssh root@192.168.31.29 'firewall-cmd --list-ports'(预期 5280/tcp 5281/tcp)
客户端查服务 客户端有 lmutil 时:lmutil lmstat -c 5280@192.168.31.29 -a

4. 日常操作

检查状态

ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax cdslmd; ss -lntp | grep -E ":5280|:5281"'

预期:两条进程记录(cdslmd 的父进程为 lmgrd);*:5280、*:5281 均 LISTEN。 不符:缺 cdslmd → 见 场景 B。

坑(别用 ps -ef | grep):通过 SSH 执行时,脚本自身命令行含 lmgrd|cdslmd 字样,ps -ef | grep 会把它当成进程列出来(假阳性); 判断进程一律用 pgrep -x(按进程名精确匹配)。

启动

先查是否已在运行(重复启动会报端口占用),并归档旧日志——lmgrd -l 启动时会把日志文件截断重写,不归档则历史日志即丢失。

ssh root@192.168.31.29 '
cp -p /opt/FlexLM/Cadence/lmgrd.log /root/lmgrd.log.$(date +%Y%m%d-%H%M%S) 2>/dev/null
setsid nohup /opt/FlexLM/Cadence/lmgrd \
  -c /opt/FlexLM/Cadence/cds.license.dat \
  -l /opt/FlexLM/Cadence/lmgrd.log </dev/null >/dev/null 2>&1 &
sleep 8
pgrep -ax lmgrd; pgrep -ax cdslmd'

预期:8 秒内出现两个进程;日志出现 Server started on 192.168.31.29 for: 与 feature 名列表。 不符:进程未起 → 看日志,转 场景 A。

坑(后台进程被回收):必须 setsid nohup … & 且 stdin/stdout/stderr 全部重定向,否则进程随会话结束被杀。

停止 / 重启

ssh root@192.168.31.29 'pkill lmgrd; pkill cdslmd; sleep 3; pgrep -x lmgrd; pgrep -x cdslmd'

注意: - 停服会断开全部客户端连接,正在跑的 Cadence 作业可能随即失败——先确认无人正在用(问用户 / 看日志 OUT: 计数是否归零),再执行;重启即重新执行「启动」节。 - 不要用 pkill -f 加完整路径:-f 会匹配到承载 SSH 脚本的 shell 自身,导致会话被杀(返回码 255、无输出)。按进程名 pkill lmgrd / pkill cdslmd 即可。 - lmdown 文件权限为 644(无执行位),调用会报 Permission denied,用 pkill 代替。

日志查看

日志固定为 /opt/FlexLM/Cadence/lmgrd.log(启动时 -l 指定)。

ssh root@192.168.31.29 'tail -50 /opt/FlexLM/Cadence/lmgrd.log'
ssh root@192.168.31.29 'grep -inE "OUT:|IN:|DENIED|error|invalid" /opt/FlexLM/Cadence/lmgrd.log | tail -30'

关键特性:lmgrd -l 每次启动都会截断重写该文件,日志内容只覆盖"本次启动至今"。需要跨启动保留历史,须在启动前手工归档(见「启动」节)。

5. 配置管理

配置 位置 说明
license 文件 /opt/FlexLM/Cadence/cds.license.dat 唯一配置源。当前形态:2 行头 + 605 条 FEATURE(floating:HOSTID=ANY、permanent uncounted、版本字段 2100.000);头行为 SERVER 192.168.31.29 525400310e02 5280 与 DAEMON cdslmd /opt/FlexLM/Cadence/cdslmd port=5281;sha256 128c93291de95e4d32eb03e866c344e79c5ddfa330e66578eb5ead6bb103bb3b(266661 字节)
daemon 路径 license 内 DAEMON 行 必须是绝对路径且与该二进制实际位置一致;移动目录会导致启动失败
解释器链接 /lib64/ld-lsb-x86-64.so.3 → /lib64/ld-linux-x86-64.so.2 二进制的 ELF interpreter,缺失时 lmgrd 报 No such file or directory(RC=127)
日志文件 /opt/FlexLM/Cadence/lmgrd.log 启动参数 -l 指定;每次启动被截断重写
状态目录 /opt/FlexLM/Cadence/.cadence/ cdslmd 自动创建(权限 777);license 文件所在目录必须可写,回滚时一并清理

修改 license 的流程:先备份(scp 回本机)→ 改文件 → 校验结构(wc -l 与 grep -c "^FEATURE")→ 归档旧日志 → 重启 → 查日志零错误。 改 SERVER 行的 HostID 或主机名会导致 HostID 不匹配、服务起不来(本机 MAC = 525400310e02)。

易错点: - 行首关键字必须完整(SERVER/DAEMON/FEATURE);历史上出现过 EATURE 截断(见 SOP.md 变更 1 步骤 4)。 - 该 license 由 lmcrypt -r 生成,一条 FEATURE 记录跨多物理行、行尾以 \ 续行(605 条 = 4827 物理行)。这是合法写法,不要手工压行;也不要让编辑器把行尾 \ 后的空白吃掉。 - 从 Windows 侧取文件时注意 CRLF,落盘前 tr -d '\r'。

6. 备份与恢复

  • 备份策略:仅在修改 license 前手工备份;无定期任务。
  • 备份位置:本机 license_srv_20260926/backup/opt/FlexLM/Cadence/,台账见 license_srv_20260926/backup/README.md。
  • 手工备份:
TS=$(date +%Y%m%d-%H%M%S)
scp root@192.168.31.29:/opt/FlexLM/Cadence/cds.license.dat "cds.license.dat.bak.$TS"
ssh root@192.168.31.29 'sha256sum /opt/FlexLM/Cadence/cds.license.dat'   # 与本地 sha256sum 比对
  • 恢复:
scp cds.license.dat.bak.<TS> root@192.168.31.29:/opt/FlexLM/Cadence/cds.license.dat
ssh root@192.168.31.29 'pgrep -ax lmgrd; pkill lmgrd; pkill cdslmd; sleep 3'
# 再按第 4 章「启动」拉起,并确认日志无错误
  • 验证恢复:grep -c "^FEATURE" /opt/FlexLM/Cadence/cds.license.dat 为 605(wc -l 为 4829),且进程/端口正常。
  • 演练记录:暂无真实恢复演练;2026-09-26 变更 3 做过备份+哈希比对与旁路试读(SOP.md 变更 3 步骤 3)。

7. 监控与告警

当前无监控、无告警,只能人工巡检。建议至少每日一次:

指标 命令 正常值
进程 ssh root@192.168.31.29 'pgrep -cx lmgrd; pgrep -cx cdslmd' 两个 1
5280/5281 监听 ssh root@192.168.31.29 'ss -lnt \| grep -cE ":5280\|:5281"' 2
日志错误 ssh root@192.168.31.29 'grep -icE "error\|invalid\|signature\|wrong" /opt/FlexLM/Cadence/lmgrd.log' 0
HostID ssh root@192.168.31.29 'grep -i "HostID" /opt/FlexLM/Cadence/lmgrd.log \| tail -2' 两行均为 525400310e02
feature 注册量 ssh root@192.168.31.29 'awk "/Server started on/{f=1;next} f&&/\(cdslmd\)/&&!/SLOG/{sub(/^[0-9:]+ \(cdslmd\)/,\"\"); n+=NF} END{print n}" /opt/FlexLM/Cadence/lmgrd.log' 约 605(含少量说明词时略高)

后续可接 systemd + 简单探测告警(见第 11 章待办)。

8. 故障处置

场景 A:客户端连不上 5280

症状:客户端工具报 Cannot connect to license server / License server machine is down;nc -vz 192.168.31.29 5280 失败或超时。

诊断

ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax cdslmd'                 # 预期两条进程
ssh root@192.168.31.29 'ss -lntp | grep -E ":5280|:5281"'                   # 预期两条 LISTEN
ssh root@192.168.31.29 'getenforce; firewall-cmd --list-ports 2>/dev/null'  # 预期 Enforcing;5280/5281 已放行

处置:进程缺失 → 按第 4 章「启动」拉起;端口未放行 → firewall-cmd --add-port=5280/tcp --permanent && firewall-cmd --reload(需用户批准);主机不可达 → 检查虚拟机与网络。 验证:nc -vz 192.168.31.29 5280 成功,日志尾部出现客户端连接记录。

场景 B:cdslmd 反复重启或缺失

症状:只有 lmgrd 进程,5280 在监听但客户端报 vendor daemon down;日志里 cdslmd 反复启动。

诊断

ssh root@192.168.31.29 'grep -inE "cdslmd|restart|expire|invalid|signature|FEATURE|Wrong hostid" /opt/FlexLM/Cadence/lmgrd.log | tail -30'
ssh root@192.168.31.29 'grep -c "^FEATURE" /opt/FlexLM/Cadence/cds.license.dat; wc -l /opt/FlexLM/Cadence/cds.license.dat'

处置:日志提示某 FEATURE 行格式错误 → 按 SOP.md 变更 1 步骤 4 定点修复(先备份);提示 signature/expired → license 本身不可用,需换发;提示 Wrong hostid on SERVER line → SERVER 行 HostID 与主机 MAC 不符,核对 525400310e02。 验证:cdslmd 稳定在跑,日志无 restart 循环。

场景 C:lmgrd 起不来,报 No such file or directory(RC=127)

症状:lmgrd -v 报 bash: /opt/FlexLM/Cadence/lmgrd: No such file or directory,但文件明明存在(ls -l 可见且可执行)。

诊断

ssh root@192.168.31.29 'readelf -l /opt/FlexLM/Cadence/lmgrd | grep -i interpreter; ls -l /lib64/ld-lsb-x86-64.so.3'

处置:这是 ELF interpreter 缺失(系统升级或误删链接导致):

ssh root@192.168.31.29 '[ -e /lib64/ld-lsb-x86-64.so.3 ] || ln -s /lib64/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3'

验证:/opt/FlexLM/Cadence/lmgrd -v 输出版本号(lmgrd v11.16.4.0 …),再按第 4 章启动。

场景 D:客户端报 version 或 feature 不存在

症状:license server 可达,但工具报 License server does not support this version of this feature 或 Feature not found。

诊断

ssh root@192.168.31.29 'grep -m1 "^FEATURE" /opt/FlexLM/Cadence/cds.license.dat | cut -c1-90'
ssh root@192.168.31.29 'grep -inE "DENIED|OUT:|version" /opt/FlexLM/Cadence/lmgrd.log | tail -20'

处置:当前 license 的版本字段为 2100.000(版本上限,远高于 IC617/IC25.10,方向安全),故此场景在新 license 下基本不会由"版本过低"引起; 若仍报错,优先排查 feature 名拼写或工具所需 feature 不在 605 条清单内(grep -i "<feature 名>" cds.license.dat 确认)。 验证:客户端启动一次工具(如 virtuoso -version)不再报 license 错误。

场景 E:客户端报 lmgrd is not running ... (-96,7:2 "No such file or directory")

状态注(2026-09-26 变更 3 后):本场景的历史根因是 license 的 SERVER 行用主机名 Flexlm 而客户端无法解析;新 license 的 SERVER 行已改为 IP,该问题不再存在。本节保留作为同类问题(改了主机名/地址后客户端不可达)的排查参考。

症状:端口能连通,服务端 ss 也显示 LISTEN,但客户端 lmstat 报 lmgrd 未运行,错误里夹着 No such file or directory。

诊断

ssh root@192.168.31.29 'pgrep -ax lmgrd; ss -lntp | grep -E "5280|5281"'
ssh root@192.168.31.18 'getent hosts Flexlm || echo "Flexlm 无法解析"'

根因:license 的 SERVER 行写主机名,而客户端解析失败 → 判定服务不可达。 处置:把 SERVER 行改为 IP(当前已是 192.168.31.29,无需处理);或在各客户端 /etc/hosts 补 192.168.31.29 Flexlm(注意集群 hosts 的 slurm-deploy 块由部署器管理,勿手改块内内容)。 验证:客户端 lmutil lmstat -c 5280@192.168.31.29 -a 输出 license server UP (MASTER) 与 cdslmd: UP。

场景 F:checkout 被拒,报 Invalid host / -9,57

状态注(2026-09-26):触发本场景的旧 node-locked license 已于变更 2 清除;新 license 为 HOSTID=ANY floating,理论上不再出现该错误。本节保留作换证与同类排障参考。

症状:lmstat 显示服务正常、feature 席位存在;但客户端 lmdiag -c 5280@192.168.31.29 -n <feature> 报 This license cannot be checked out because: Invalid host,FlexNet Licensing error:-9,57。

诊断

# 看 FEATURE 行是否带 HOSTID=<MAC>(带 = node-locked,只认该 MAC 的机器)
ssh root@192.168.31.29 'grep -m1 "^FEATURE" /opt/FlexLM/Cadence/cds.license.dat | cut -c1-90'

根因:FEATURE 行带 HOSTID=<MAC> 即 node-locked,许可只发给该 MAC 的机器,集群客户端结构上无法使用;服务端配置无法绕过。 处置:换发 floating 版本(FEATURE 行 HOSTID=ANY,SERVER 行的 hostid 仍用于保护文件)。 验证:换发后在客户端 lmdiag -c 5280@<server> -n <feature> 应输出 This license can be checked out。

9. 安全与权限

  • 服务以 root 运行(FlexLM 传统部署),/opt/FlexLM/Cadence/ 属主 root,权限 755/644;.cadence/ 为 777(cdslmd 自动创建)。
  • license 文件含 HostID 与签名段,属敏感信息:不外传、不贴公开渠道;备份只留管理员本机。
  • 无独立账号体系;访问控制依赖主机 SSH 权限(root 免密,仅管理员本机)。
  • 需放行 5280/tcp、5281/tcp 供客户端访问(当前已固定放行);若后续新增 vendor daemon(如 Calibre 的 mgcld),须为其 DAEMON 行固定端口并同步放行。

10. 容量与性能

  • 资源占用极低:两个进程常驻,内存合计约几十 MB;/ 余量约 18G。
  • 并发上限:当前 605 条 FEATURE 全部为 uncounted(不限席位),不存在"席位耗尽"问题;permanent 表示不过期。
  • 扩容触发:仅在换用 counted 形态 license 时才会出现 Licensed number of users already reached,届时更换 license 即可,无需改服务配置。
  • 已知瓶颈:单点部署,无冗余;服务中断即全体客户端不可用。

11. 附录

  • 相关文档:license_srv_20260926/docs/SOP.md(变更档案,现行变更 3)、license_srv_20260926/backup/README.md(备份台账)、license_srv_20260926/logs/(启动日志留档)。
  • 关联工程:ic25_install_20260924/(IC25.10,已卸载);旧版工具链介质 Cadence安装软件包/(IC617/MMSIM15/ASSURA/Calibre2015,待安装)。
  • 待办(2026-09-26 变更 3 后):
  • ~~客户端 modulefile 补 license 变量~~ 已完成(slurm_ins 渲染 CDS_LIC_FILE/LM_LICENSE_FILE);
  • ~~放行防火墙 5280/5281~~ 已完成;
  • ~~旧 node-locked license 客户端被拒~~ → 已于变更 2 清除,变更 3 装载 floating license,问题消解;
  • 视需要补 systemd 常驻与开机自启(当前主机重启后服务丢失);
  • 真实 checkout 验证:IC617 装好后用 lmutil lmstat/lmdiag 实测 feature 能否取到;
  • Calibre/Mentor license:已获 floating 版(88 条 FEATURE 全 HOSTID=ANY、无 SERVER 行、uncounted)⇒ 形态可用于集群,且按 FlexNet 规则不需 license 服务与 mgcld;待 Calibre 工具安装后做客户端直读验证(放 $CALIBRE_HOME/shared/license/license.dat 或设 MGLS_LICENSE_FILE)。若实测必须走服务端,则需装 Calibre 取 mgcld 并另起独立实例。详见 SOP.md 变更 3 §3.9.1。
  • 修订记录:
  • 2026-09-26 首次建立(服务首次启动后);
  • 2026-09-26 17:24 修订:旧 node-locked license 清除、服务停止(对应 SOP.md 变更 2);
  • 2026-09-26 22:30 修订:装载 floating license、服务恢复运行、SERVER 行改为 IP、命令改 pgrep -x、日志截断与 .cadence 状态目录两条特性入册(对应 SOP.md 变更 3)。
  • 2026-09-26 22:45 修订:记录 Calibre license 核实结论(单机 node-locked、不适用于集群),第 11 章待办 6 同步更新(对应 SOP.md 变更 3 §3.9)。
  • 2026-09-26 22:50 修订:Calibre license 换为 floating(HOSTID=ANY)版并核实通过,待办 6 更新为"待工具安装后验证客户端直读"(对应 SOP.md 变更 3 §3.9.1)。

来源:/home/rain/Documents/eda_tools_ins/Cadence/license_srv_20260926/docs/RUNBOOK.md | 最后更新:2026-09-28 13:26(由 build/sync.py 同步,请勿在站点侧修改)