RUNBOOK — Synopsys License 服务(snpslmd)¶
服务主机:
192.168.31.29(主机名Flexlm);软件:SCL v2018.06 自带lmgrd v11.14.1.3+snpslmd v11.14.1.3服务目录:/opt/FlexLM/Synopsys/;变更档案见docs/SOP.md(现行版本:首次上线 2026-09-28) 当前状态:运行中(2026-09-28 13:08 起)
目录¶
1. 服务概览¶
为群集客户端(VCS-MX、Verdi 等 Synopsys 工具)发放 floating license 的 FlexLM 许可服务器。
| 项 | 内容 |
|---|---|
| 组件 | lmgrd(license manager,监听 2700)+ snpslmd(Synopsys vendor daemon,固定 2701,由 license 的 DAEMON 行 port=2701 指定) |
| 主机 | 192.168.31.29 / Flexlm,Rocky Linux 9.8,MAC 52:54:00:31:0e:02(= license SERVER 行绑定的 HostID) |
| 二进制来源 | SCL v2018.06 /data/nfs/tools/synopsys/scl/2018.06/linux64/bin/,已拷贝到本机 /opt/FlexLM/Synopsys/ |
| 依赖 | 无外部依赖;不依赖 NFS 与 module load(license 主机刻意不挂 /tools) |
| 异常影响 | 服务中断 → 六台客户端无法启动 Synopsys 工具(提示找不到 license server) |
| 重要性 | 高(单点,无冗余) |
| 当前状态 | 2026-09-28 13:08 起运行中;装载 2847 条 INCREMENT/FEATURE(注册 2843),核心 feature 各 99 席位 |
| 已知限制 | ① 已由 systemd 托管(flexlm-synopsys.service,开机自启 + 异常重启),运维见 ../../flexlm_systemd_20260928/docs/RUNBOOK.md;② 无监控告警;③ 与 Cadence FlexLM 同机——但两者各自独立 cgroup,按单元名停服即可(见第 8 章场景 C) |
同机双实例说明:本机同时运行 Cadence 的
lmgrd(:5280)+cdslmd(:5281)。 两个 lmgrd 是独立进程、独立目录、独立端口,互不感知。这是刻意的设计——不把 两家 vendor daemon 合并到一个 lmgrd,以避免签名/版本互斥和故障域耦合。
2. 接入与凭据¶
- 登录:本地 root 免密 SSH 到
root@192.168.31.29(密钥见管理员本机~/.ssh/,凭据不入文档)。 - 客户端接入(尚未固化到 modulefile,当前需手工设置):
export SNPSLMD_LICENSE_FILE=2700@192.168.31.29
⚠️ 必须用
SNPSLMD_LICENSE_FILE,不要只设LM_LICENSE_FILE。Cadence 的 modulefile 已把LM_LICENSE_FILE设为5280@192.168.31.29;Synopsys 老工具在该专用变量缺失时会回退 读LM_LICENSE_FILE,去 5280 找snpslmd必然失败并超时重试,表现为工具启动明显变慢。
SERVER行已写 IP(SERVER 192.168.31.29 525400310e02 2700),客户端无需解析主机名Flexlm。若日后换证又写回主机名,客户端将报lmgrd is not running (-96)。- 客户端连通性自检:
nc -vz 192.168.31.29 2700 # 预期 succeeded
nc -vz 192.168.31.29 2701 # 预期 succeeded
3. 日常速查表¶
| 目的 | 命令 |
|---|---|
| 看本服务进程 | ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax snpslmd' |
| 看端口 | ssh root@192.168.31.29 'ss -lntp \| grep -E ":2700\|:2701"' |
| 看日志尾部 | ssh root@192.168.31.29 'tail -30 /opt/FlexLM/Synopsys/lmgrd.log' |
| 扫日志错误 | ssh root@192.168.31.29 'grep -inE "error\|invalid\|fail\|signature\|denied\|wrong" /opt/FlexLM/Synopsys/lmgrd.log \| tail -20' |
| 单元状态 | ssh root@192.168.31.29 'systemctl is-active flexlm-synopsys.service' |
| 启动 | ssh root@192.168.31.29 'systemctl start flexlm-synopsys.service' |
| 停止 / 重启 | ssh root@192.168.31.29 'systemctl stop flexlm-synopsys.service'(重启用 restart;⚠️ 约 60–70s 后才恢复监听) |
| 服务端查许可 | ssh root@192.168.31.29 'cd /opt/FlexLM/Synopsys && ./lmutil lmstat -c 2700@192.168.31.29 -a \| head -8' |
| 看当前取用 | ssh root@192.168.31.29 'grep -E "OUT:\|IN:" /opt/FlexLM/Synopsys/lmgrd.log \| tail -20' |
| 看防火墙放行 | ssh root@192.168.31.29 'firewall-cmd --list-ports'(预期含 2700/tcp 2701/tcp) |
| 备份 license | scp root@192.168.31.29:/opt/FlexLM/Synopsys/Synopsys.dat ./Synopsys.dat.bak.$(date +%Y%m%d-%H%M%S) |
4. 日常操作¶
检查状态¶
ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax snpslmd; ss -lntp | grep -E ":2700|:2701"'
预期:四条进程记录(Cadence 的 lmgrd+cdslmd、Synopsys 的 lmgrd+snpslmd);
:5280、:5281、:2700、:2701 均 LISTEN。
不符:只有 Cadence 两条 → 本服务未启动,按「启动」拉起。
坑(别用 ps -ef | grep):通过 SSH 执行时脚本自身命令行含 lmgrd|snpslmd 字样,
ps -ef | grep 会把脚本自己列出来(假阳性)。判断进程一律用 pgrep -x(按进程名精确匹配)。
坑(区分两个 lmgrd):本机有两条 lmgrd。要看清楚命令行中的 -c 参数:
Cadence 是 -c /opt/FlexLM/Cadence/cds.license.dat,本服务是 -c /opt/FlexLM/Synopsys/Synopsys.dat。
启动¶
已由 systemd 托管(unit:flexlm-synopsys.service):
ssh root@192.168.31.29 'systemctl start flexlm-synopsys.service'
⚠️ 启动后约 60–70 秒才恢复监听——被停 lmgrd 的 socket 处于 TIME-WAIT,lmgrd 未使用
SO_REUSEADDR,无法立即 bind 同名端口,会自行重试。不要在此期间反复重启(每次重启都
重新触发等待)。详见 ../../flexlm_systemd_20260928/docs/RUNBOOK.md 场景 C。
就绪判据用端口而非进程:
ssh root@192.168.31.29 'ss -lnt | grep -q ":2701" && echo READY || echo "not ready yet"'
仅在回滚到裸进程方式时才使用
setsid nohup ./lmgrd … &(原始命令见docs/SOP.md第 7 章)。 裸进程方式下必须cd到 license 文件所在目录再启动——DAEMON snpslmd未写路径, lmgrd 在 license 文件目录与其自身目录查找 vendor daemon。
停止 / 重启¶
已由 systemd 托管,按单元名操作即可(两套服务各自独立 cgroup,不互相波及):
ssh root@192.168.31.29 'systemctl stop flexlm-synopsys.service'
ssh root@192.168.31.29 'systemctl restart flexlm-synopsys.service'
ssh root@192.168.31.29 'systemctl is-active flexlm-synopsys.service' # 预期 active
停止后状态应为 inactive (dead)——unit 内声明了 SuccessExitStatus=15,lmgrd 收 SIGTERM 后
exit(15) 属正常码,不是故障。
注意:
- 停服会断开全部客户端连接,正在跑的作业可能随即失败——先确认无人正在用(看日志
OUT: 与 IN: 是否配对、或问用户),再执行。
- 重启后约 60–70 秒才恢复监听,见「启动」节,勿反复重启。
历史做法(已废弃):systemd 化前必须按 PID 精确 kill,因为机器上有两个 lmgrd、 按名杀会连带 Cadence。仅当回滚到裸进程后才参考,做法见
../../flexlm_systemd_20260928/docs/RUNBOOK.md场景 D。
日志查看¶
日志固定为 /opt/FlexLM/Synopsys/lmgrd.log(启动时 -l 指定)。
ssh root@192.168.31.29 'tail -50 /opt/FlexLM/Synopsys/lmgrd.log'
ssh root@192.168.31.29 'grep -inE "OUT:|IN:|DENIED|error|invalid" /opt/FlexLM/Synopsys/lmgrd.log | tail -30'
关键特性:lmgrd -l 每次启动都会截断重写该文件,日志只覆盖「本次启动至今」。
需要跨启动保留历史,须在启动前手工归档。
5. 配置管理¶
| 配置 | 位置 | 说明 |
|---|---|---|
| license 文件 | /opt/FlexLM/Synopsys/Synopsys.dat |
唯一配置源。当前:2 行头 + 2847 条 INCREMENT/FEATURE;头行为 SERVER 192.168.31.29 525400310e02 2700 与 DAEMON snpslmd port=2701;620015 字节 |
| daemon 路径 | license 内 DAEMON 行未写路径 |
lmgrd 在 license 所在目录 / 自身目录查找 snpslmd——故二进制必须与 license 同目录,或确保在 PATH 中 |
| 解释器链接 | /lib64/ld-lsb-x86-64.so.3 → /lib64/ld-linux-x86-64.so.2 |
二进制为 x64_lsb,缺失时 lmgrd 报 No such file or directory(RC=127) |
| 日志文件 | /opt/FlexLM/Synopsys/lmgrd.log |
启动参数 -l 指定;每次启动被截断重写 |
修改 license 的流程:先备份(scp 回本机)→ 改文件 → 校验结构(wc -l = 11391、
grep -cE "^(FEATURE|INCREMENT)" = 2847)→ 归档旧日志 → 重启 → 查日志零错误。
易错点:
- INCREMENT SSS 那条 key 有 NOTICE="[DO NOT DELETE/MODIFY SSS OR ANY OTHER KEYS…]",
不要删改。
- 改 SERVER 行的 HostID 会导致 HostID 不匹配、服务起不来(本机 MAC = 525400310e02)。
- 原文件曾为 CRLF 行尾(Windows 传来)。改动后须 tr -d '\r' 统一为 LF,否则易出现行尾混杂。
- 行首关键字必须完整(SERVER/DAEMON/FEATURE/INCREMENT)。
6. 备份与恢复¶
- 备份策略:仅在修改 license 前手工备份;无定期任务。
- 备份位置:本机
synopsys_license_20260928/backup/opt/FlexLM/,台账见该目录README.md。 - 手工备份:
TS=$(date +%Y%m%d-%H%M%S)
scp root@192.168.31.29:/opt/FlexLM/Synopsys/Synopsys.dat "Synopsys.dat.bak.$TS"
ssh root@192.168.31.29 'sha256sum /opt/FlexLM/Synopsys/Synopsys.dat' # 与本地比对
- 恢复:
scp Synopsys.dat.bak.<TS> root@192.168.31.29:/opt/FlexLM/Synopsys/Synopsys.dat
ssh root@192.168.31.29 "kill <snpslmd_pid>; sleep 2; kill <lmgrd_pid>" # 按 PID,勿用 pkill lmgrd
# 再按第 4 章「启动」拉起,并确认日志无错误
- 验证恢复:
grep -cE "^(FEATURE|INCREMENT)"为 2847,且进程/端口正常。 - 演练记录:暂无真实恢复演练;2026-09-28 首次上线做过备份 + sha256 比对。
7. 监控与告警¶
当前无监控、无告警,只能人工巡检。建议至少每日一次:
| 指标 | 命令 | 正常值 |
|---|---|---|
| 进程 | ssh root@192.168.31.29 'pgrep -cx lmgrd; pgrep -cx snpslmd' |
2 与 1(lmgrd 计 2 = Cadence + Synopsys) |
| 端口监听 | ssh root@192.168.31.29 'ss -lnt \| grep -cE ":2700\|:2701"' |
2 |
| 日志错误 | ssh root@192.168.31.29 'grep -icE "error\|invalid\|signature\|wrong" /opt/FlexLM/Synopsys/lmgrd.log' |
0 |
| 主机可达 | nc -vz 192.168.31.29 2700 |
succeeded |
后续可接 systemd + 简单探测告警(见第 11 章待办)。
8. 故障处置¶
场景 A:客户端连不上 2700¶
症状:客户端工具报 Cannot connect to license server / License server machine is down;
nc -vz 192.168.31.29 2700 失败或超时。
诊断
ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax snpslmd' # 预期含 Synopsys 两条
ssh root@192.168.31.29 'ss -lntp | grep -E ":2700|:2701"' # 预期两条 LISTEN
ssh root@192.168.31.29 'getenforce; firewall-cmd --list-ports' # 预期 2700/tcp 2701/tcp 在列
处置:进程缺失 → 按第 4 章「启动」拉起;端口未放行 → firewall-cmd --add-port=2700/tcp
(runtime 立即生效)+ --permanent --add-port=2700/tcp(持久化);主机不可达 → 检查虚拟机与网络。
注意:放行端口时不要执行
firewall-cmd --reload,会瞬断同机 Cadence 的许可连接。
验证:nc -vz 192.168.31.29 2700 成功,日志尾部出现客户端连接记录。
场景 B:snpslmd 反复重启或缺失¶
症状:只有本服务的 lmgrd 进程,2700 在监听但客户端报 vendor daemon down;日志里
snpslmd 反复启动。
诊断
ssh root@192.168.31.29 'grep -inE "snpslmd|restart|expire|invalid|signature|Wrong hostid" /opt/FlexLM/Synopsys/lmgrd.log | tail -30'
ssh root@192.168.31.29 'grep -cE "^(FEATURE|INCREMENT)" /opt/FlexLM/Synopsys/Synopsys.dat; wc -l /opt/FlexLM/Synopsys/Synopsys.dat'
处置:提示某行格式错误 → 定点修复(先备份);提示 signature/expired → license 本身
不可用,需换发;提示 Wrong hostid on SERVER line → 核对 MAC 525400310e02;
snpslmd 找不到 → 确认 /opt/FlexLM/Synopsys/snpslmd 存在且可执行。
验证:snpslmd 稳定在跑,日志无 restart 循环。
场景 C:误杀了 Cadence 的 lmgrd¶
状态注(2026-09-28 systemd 化后):两套服务已各自独立 cgroup,
systemctl stop flexlm-synopsys.service不会波及 Cadence,本场景在 systemd 模式下不会发生。 本节保留作为「回滚到裸进程方式后」的应急参考——那时仍必须按 PID 精确 kill。
症状:本机两个 lmgrd 都被杀掉(执行了 pkill lmgrd),全集群 Cadence 与 Synopsys
许可同时中断。
诊断
ssh root@192.168.31.29 'pgrep -ax lmgrd; pgrep -ax cdslmd; pgrep -ax snpslmd'
ssh root@192.168.31.29 'ss -lntp | grep -E ":5280|:5281|:2700|:2701"'
处置:两个服务分别按各自 RUNBOOK 的「启动」节拉起——
Cadence 见 Cadence/license_srv_20260926/docs/RUNBOOK.md,Synopsys 见本文档第 4 章。
预防:停服一律按 PID,见第 4 章「停止 / 重启」。
验证:四条进程齐全,四个端口 LISTEN,两类工具均可取到许可。
场景 D:客户端报 lmgrd is not running … (-96)¶
症状:端口能连通、服务端 ss 显示 LISTEN,但客户端 lmstat 报 lmgrd 未运行。
诊断
ssh root@192.168.31.29 'grep -m1 "^SERVER" /opt/FlexLM/Synopsys/Synopsys.dat'
ssh root@192.168.31.18 'getent hosts Flexlm || echo "Flexlm 无法解析"'
根因:license 的 SERVER 行写了主机名而非 IP,客户端解析失败即判定服务不可达。
处置:确认 SERVER 行为 192.168.31.29(当前已是);若换证后被改回主机名,改回 IP,
或在各客户端 /etc/hosts 补 192.168.31.29 Flexlm(注意集群 hosts 的 slurm-deploy 块由
部署器管理,勿手改块内内容)。
验证:客户端 lmutil lmstat -c 2700@192.168.31.29 输出 license server UP (MASTER)
与 snpslmd: UP。
场景 E:许可正常但工具启动/编译报错¶
症状:lmdiag 显示 This license can be checked out,但 VCS 编译或 Verdi 启动失败。
| 报错 | 根因 | 现状 |
|---|---|---|
vcs: line 3166: dc: command not found |
系统缺 dc(由 bc 包提供) |
已修:dnf install -y bc |
ld: archive.0/*.a(...): .symtab local symbol at index 105 (>= sh_info of 2) / error adding symbols: bad value |
Rocky 9 的 binutils 2.35 读不了 VCS 2017.12 自带预编译 archive |
未解决(独立课题) |
verdi … error while loading shared libraries: libXss.so.1 |
缺 X11 库 | 已修:dnf install -y libXScrnSaver |
verdi … error while loading shared libraries: libpng12.so.0 |
RHEL 9 已移除该包 | 未解决(需老库兼容层) |
处置:先确认不是 license 问题(lmstat / lmdiag 通过即证明许可侧正常),再按上表
处理运行期依赖。不要因此怀疑或改动 license 服务。
9. 安全与权限¶
- 服务以 root 运行,
/opt/FlexLM/Synopsys/属主 root,权限 755/644。 - license 文件含 HostID 与签名段,属敏感信息:不外传、不贴公开渠道;备份只留管理员本机。
- 无独立账号体系;访问控制依赖主机 SSH 权限(root 免密,仅管理员本机)。
- 需放行
2700/tcp、2701/tcp供客户端访问(当前已 runtime + permanent 放行)。 - 与 Cadence 服务共用主机,但目录与进程完全隔离:Cadence 在
/opt/FlexLM/Cadence/, Synopsys 在/opt/FlexLM/Synopsys/;运维操作不得跨目录修改。
10. 容量与性能¶
- 资源占用极低:两个进程常驻,内存合计约几十 MB。
- 并发上限:核心 feature 各 99 席位(
Verdi、VCSCompiler、VCSRuntime等); license 整体有效期至 2030-12-30,版本上限 2030.12(远高于 2017/2018 工具,方向安全)。 - 扩容触发:出现
Licensed number of users already reached时才需换证,无需改服务配置。 - 已知瓶颈:单点部署,无冗余;服务中断即六台客户端不可用。
11. 附录¶
- 相关文档:
docs/SOP.md(首次上线变更档案)、backup/README.md(备份台账)。 - 同机同类服务:
Cadence/license_srv_20260926/docs/RUNBOOK.md(Cadence FlexLM,5280/5281)。 - 上游工程:
synopsys_install_2018/(工具安装)、docs/HANDOFF.md(项目根指针)。 - 待办(2026-09-28 上线后):
- modulefile 固化:六台客户端设
SNPSLMD_LICENSE_FILE=2700@192.168.31.29, 走 slurm_ins 工程module_env.families;不可依赖LM_LICENSE_FILE兜底(见第 2 章)。 - 运行期兼容层:VCS 需老版 binutils、Verdi 需
libpng12等老库(见场景 E)。 - ~~开机自启~~ 已完成(
flexlm-synopsys.service,开机自启 + 异常重启); 探活告警仍缺——systemd 只能自愈"进程退出",发现不了"进程活着但不发许可"(见../../flexlm_systemd_20260928/docs/RUNBOOK.md第 11 章待办 1)。 - 冗余:如需 Triad 三机冗余,须向 Synopsys 申请并由其签发含 3 行
SERVER的 license。 - 修订记录:
- 2026-09-28 首次建立(服务首次启动并验证通过后)。
来源:
/home/rain/Documents/eda_tools_ins/Synopsys/synopsys_license_20260928/docs/RUNBOOK.md| 最后更新:2026-09-28 13:26(由build/sync.py同步,请勿在站点侧修改)