lmgrd 是什么?
lmgrd 是 License Manager Daemon 的缩写,即“许可证管理守护进程”,它是由FlexNet Publisher(由Macrovision公司开发,现为Open Text公司产品)提供的一个核心服务程序。

它的作用是:
- 运行在服务器上:作为后台服务持续运行。
- 管理许可证:负责加载、管理和控制软件的许可证文件。
- 客户端通信:响应客户端应用程序(如MATLAB, ANSYS, AutoCAD等)的许可证请求,决定是否允许程序启动。
- 监控与日志:记录所有许可证的使用情况、错误信息等。
可以把 lmgrd 想象成一个“数字门卫”,它手里拿着一份许可证清单(.lic文件),当有人(客户端程序)想进入(使用软件)时,门卫会检查清单,确认有可用名额后,才放行。
lmgrd 的核心组成部分
要使用 lmgrd,你需要了解三个关键文件:
-
lmgrd可执行文件:
(图片来源网络,侵删)- 这是程序本身,它通常位于软件安装目录的某个子文件夹中,
MATLAB\flexlm\intel\lmgrd.exe(Windows) 或/opt/matlab/etc/lmgrd(Linux)。
- 这是程序本身,它通常位于软件安装目录的某个子文件夹中,
-
许可证文件 (
.lic文件):- 这是许可证的“法律条文”,包含了所有许可证信息,如:
- 服务器主机名:
SERVER hostname 1055 ... - 许可证供应商:
VENDOR matlab ... - 许可证特征:
FEATURE matlab ...
- 服务器主机名:
- 这个文件通常由软件供应商提供,是
lmgrd运行的核心依据。
- 这是许可证的“法律条文”,包含了所有许可证信息,如:
-
日志文件 (
.log文件):lmgrd的“工作日记”,它会将所有重要事件(启动、停止、许可证签出、签入、错误等)都记录在这个文件中。- 当许可证出现问题时,查看日志文件是第一步。
lmgrd 命令详解
lmgrd 的基本语法结构如下:
lmgrd [options] license_file_path [log_file_path]
常用命令行选项
| 选项 | 描述 | 示例 |
|---|---|---|
-c <license_file> |
指定许可证文件路径,这是必需的参数。 | lmgrd -c /path/to/licenses.lic |
-l <log_file> |
指定日志文件路径,如果未指定,lmgrd 会在当前目录下创建 debug.log。 |
lmgrd -c licenses.lic -v 11 -l /var/log/lmgrd.log |
-x <license_file> |
指定诊断许可证文件路径,用于在不启动守护进程的情况下检查许可证文件语法。 | lmgrd -x licenses.lic |
-v <level> |
设置日志详细级别,级别越高,日志信息越详细。0: 仅错误信息1: 错误和警告 (默认)2: 错误、警告和信息3: 包含调试信息 |
lmgrd -c licenses.lic -v 3 |
-p <pid_file> |
指定PID文件路径。lmgrd 会将自己的进程ID写入此文件,方便管理和停止服务。 |
lmgrd -c licenses.lic -p /var/run/lmgrd.pid |
常用操作场景示例
启动许可证管理器
这是最常见的用法,假设你的许可证文件在 /etc/licenses/ 目录下。

Linux / macOS:
# 指定许可证文件和日志文件启动 sudo /opt/flexlm/lmgrd -c /etc/licenses/mysoftware.lic -l /var/log/mysoftware/lmgrd.log # 同时指定PID文件,方便后续管理 sudo /opt/flexlm/lmgrd -c /etc/licenses/mysoftware.lic -l /var/log/mysoftware/lmgrd.log -p /var/run/mysoftware/lmgrd.pid
Windows (命令行):
REM 切换到lmgrd.exe所在目录 cd C:\Program Files\ANSYS Inc\Shared Files\Licensing\winx64 REM 启动lmgrd,指定许可证文件和日志文件 lmgrd.exe -c "C:\ProgramData\ANSYS Inc\Shared Files\Licensing\license_files\ansys.lic" -l "C:\ProgramData\ANSYS Inc\Shared Files\Licensing\logs\lmgrd.log"
注意:在Linux/macOS上,
lmgrd通常需要root权限才能绑定到1024以下的端口(如1055),在Windows上,通常以管理员身份运行。
检查许可证文件语法(不启动服务)
如果你只是想知道许可证文件有没有格式错误,而不想真的启动服务,可以使用 -x 选项。
lmgrd -x /path/to/licenses.lic
如果命令没有输出任何错误信息,说明文件语法基本正确。
停止许可证管理器
不能直接用 kill 命令杀死 lmgrd,因为它可能会在杀死前没有正确释放许可证,导致客户端程序异常,正确的停止方式是使用 lmgrd 自带的 -x 选项,或者使用 lmutil 工具。
方法1:使用 lmgrd -x (推荐)
lmgrd -c /path/to/licenses.lic -x
这个命令会向 lmgrd 发送一个优雅的停止信号,让它保存状态并正确关闭。
方法2:使用 lmutil 工具
lmutil 是一个配套的命令行工具,功能更强大。
# lmutil stop 命令 lmutil lmdown -c /path/to/licenses.lic # 或者直接杀死进程(不推荐,除非紧急情况) # lmutil lmremove -c /path/to/licenses.lic -p <lmgrd的PID>
查看许可证使用状态
通常使用 lmutil 中的 lmstat 命令来查看状态。
# 查看所有许可证的使用情况 lmutil lmstat -c /path/to/licenses.lic # 查看特定特征(FEATURE)的许可证状态 lmutil lmstat -c /path/to/licenses.lic -f myfeature # 查看当前连接到服务器的用户 lmutil lmstat -c /path/to/licenses.lic -u
故障排查
当软件提示“无法连接到许可证服务器”时,lmgrd 通常是第一个排查点。
-
检查
lmgrd是否在运行:- Linux:
ps aux | grep lmgrd - Windows: 打开“任务管理器”,查看进程列表。
- Linux:
-
检查日志文件:
- 这是最重要的一步,打开你指定的日志文件(如
lmgrd.log)。 - 常见错误:
Cannot connect to server on host ...: 检查服务器主机名或IP地址是否在.lic文件中写对了。TCP port 1055 is in use: 检查是否有其他程序占用了许可证端口,可以用netstat -an | grep 1055(Linux) 或netstat -ano | findstr 1055(Windows) 查看。Vendor daemon ... not running:lmgrd找不到或无法启动对应的vendor daemon(如matlab.exe,ansyslmd.exe),检查.lic文件中的VENDOR行是否正确,以及该vendor daemon文件是否存在。Invalid hostid: 服务器的MAC地址或主机ID与许可证文件不匹配。
- 这是最重要的一步,打开你指定的日志文件(如
-
检查防火墙:
- 确保服务器的防火墙允许客户端计算机访问
lmgrd使用的端口(通常是1055,以及vendor daemon使用的端口)。
- 确保服务器的防火墙允许客户端计算机访问
-
检查端口冲突:
- 确保没有其他服务占用了
lmgrd或其vendor daemon的端口。
- 确保没有其他服务占用了
| 命令 | 功能 | 何时使用 |
|---|---|---|
lmgrd -c ... |
启动许可证管理器 | 正常启动许可证服务时 |
lmgrd -x ... |
停止许可证管理器 | 需要优雅地关闭许可证服务时 |
lmgrd -x <.lic> |
诊断许可证文件 | 检查 .lic 文件语法是否正确时 |
lmutil lmdown -c ... |
停止许可证管理器 | lmgrd -x 失败时的备选方案 |
lmutil lmstat -c ... |
查询许可证状态 | 查看许可证使用情况、用户列表时 |
掌握 lmgrd 命令及其相关工具,是管理和维护商业软件许可证的关键技能,遇到问题时,日志文件永远是你的第一线索。
