模具组月底赶模,三个人同时开工,两个人卡在"许可不可用"。IT 一查 ptcstatus,最后一个席位被仿真组那哥们儿占着——他只是开个 Creo 看一下装配,看看尺寸,压根不是在建模。
这种事每周都发生。然后呢,然后就是群里喊"谁用完退一下",喊完没人理,最后 IT 硬着头皮重启许可服务。五十个人的研发部门,管理粒度还停留在"一个池子,先到先得"。
先说个很多管理员没意识到的前提:FlexNet 的 options file(对 PTC 来说就是 ptc.opt)是可选组件,不是必须的。 不配它,许可服务照样跑得好好的,就是——一个池子,谁都能拿,谁先拿谁得。
PTC 官方文档里对浮动许可的原话是"allows multiple end users in an organization to access a license on a license server"。也就是说,默认设计就是全员一锅粥。
而真实的企业里,不同团队对 Creo 的用法完全不是一回事:
最常见的状态。装完许可服务器,licensing 目录下那个 ptc.opt 里就孤零零一行 TIMEOUTALL 7200,有的公司甚至被人删过——删掉这行等于永不过期回收,僵尸会话占一辈子。
为什么会踩?因为安装向导不会引导你配分组,PTC 文档里分组这块藏在 FlexNet Publisher License Administration Guide 第 13 章,没人翻。
后果就是前面那个场景:跨项目组互相抢,谁也说不清自己为什么拿不到。
有人知道有 RESERVE 了,一兴奋给每个组都保一堆。RESERVE 保留出去的席位,其他人拿不到,哪怕池子里实际空着。被挡的人拿到的是 FlexNet 的 -101 / 147 错误,"All licenses are reserved for others"。
我见过最离谱的:40 个席位,RESERVE 出去 38 个,剩下的 2 个全公司抢。这比不分组还糟,因为用户会看到"池子里明明有空的,我就是拿不到",IT 又是一顿排查。
GROUP 和 HOST_GROUP 里,用户名和主机名默认是大小写敏感的。你写 HOST_GROUP mold ws-mold-01,实际机器名是 WS-MOLD-01,那这条规则就是废的,静默失效,不报错。

PTC 社区里这个问题的出现频率高得离谱。解决办法是文件头加一行 GROUPCASEINSENSITIVE ON,一了百了。
License Extension(老文档里叫 License Locked,带 "L" 后缀,在 license 文件里以 STARTUP 关键字标记)只能在 base license 启动时一起 checkout,会话中途加不了也放不掉。 你给模具组保了 AAX 扩展,人家开的是 Design Essentials 进去的,中途想用 AAX——重启 Creo,席位重新抢一遍,可能就没了。
借用(Borrow)同理。MAX_BORROW_HOURS 可以按 feature 限制借用时长,而且这个值必须小于许可证书里写的那个(没写的话 FlexNet 默认是 168 小时,也就是 7 天)。有个坑:同一个 feature 如果写了多行 MAX_BORROW_HOURS,只有最后一行生效,前面全废。这条不查日志你根本发现不了。
ptcstatus 跑起来,会列出每个 feature 的在用数/空闲数,扩展包和被借走的会单独标出来。每 10~15 分钟采一次,落盘,跑满一个月。license.dat 里的 INCREMENT 行抄一遍,feature name、数量、版本、有没有 BORROW 关键字。这是你后面写 ptc.opt 的底稿。文件在许可服务器的 licensing 目录下(典型路径 C:\Program Files\PTC\FLEXnet Admin License Server\licensing\ptc.opt),DAEMON 行要指向它。改完必须重启许可服务,ptcshutdown / ptcstartserver,或者重启 lmadmin_ptc 服务。
一个能直接用的骨架长这样(feature 名换成你自己 license 文件里的):
GROUPCASEINSENSITIVE ON
GROUP mold zhang san li
GROUP sim wang zhao
GROUP process chen liu
GROUP intern intern1 intern2
HOST_GROUP mold_ws WS-MOLD-01 WS-MOLD-02
RESERVE 6 PROE_DesignEss GROUP mold
RESERVE 2 PROE_DesignEss GROUP sim
MAX 1 PROE_DesignEss GROUP intern
EXCLUDE PROE_AdvAssembly GROUP intern
MAX_BORROW_HOURS PROE_DesignEss 168
TIMEOUTALL 3600
几个要点:RESERVE 是保底,保留的席位别人拿不到。MAX 是上限,限制这个组最多能占几个。两个配合着用,别只用 RESERVE。MAX 给实习生和外包组设 1,一个人一次只能占一个,杜绝开两个实例的情况(PTC 的 CU 定义里,一个人开多个实例就是吃多份许可)。EXCLUDE / INCLUDE 用来挡人挡组,优先级高于 INCLUDE。MAX_BORROW_HOURS 把借用锁死在一个具体值,别让工程师自己改环境变量绕过。TIMEOUTALL 从 7200 往下调,3600(1 小时)是个比较稳的起步值,最小 1200 秒(20 分钟),写小了按 20 分钟算。HOST_GROUP 而不是 GROUP 来保车间/试验室的固定机器,那些机器常常是多人共用的,按用户名分没意义。ptcflush,用来清 Creo 崩溃后残留的 TCP 连接,10 分钟才能用一次,lmadmin 上要先在 server.xml 里把 licenseReclaimAllowed 设成 true。单站点的话,ptcstatus 采样 + 落 CSV + 一张看板,够用了,成本就是两三个人日。
要上商业工具,前提是这三个条件里有俩成立:跨三个以上站点 / 需要按项目或法人实体做成本分摊 / 被审计过一次怕了。Open iT、OpenLM、Flexera FlexNet Manager、Snow 都在做。选的时候重点问一句能不能识别 PTC 的 feature name 和 BORROW 状态,很多工具对 PTC 的支持只停在"能读 lmstat 输出"这一层,扩展包和借用它读不出来,等于白买。
另外提醒一句:PTC 的 Customer Agreement 里写了,书面要求后你要在 10 个工作日内交出经授权代表签字的使用报告。 你平时攒的 CSV 就是这份报告的底稿。平时不攒,临时是拼不出来的。
一家做家电的(不点名),研发 90 来人,用 Creo 的 52 人。分四个组:结构、模具、仿真、工艺,加一批实习生。
改之前:一个池子 30 席 Design Essentials + 8 席 Advanced + 3 套 AAX 扩展。ptc.opt 里只有一行 TIMEOUTALL 7200。
摸底一个月的数据: