许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  lmgrd进程频繁自动退出或重启,常见原因(端口冲突、日志权限、license过期)

lmgrd进程频繁自动退出或重启,常见原因(端口冲突、日志权限、license过期)

阅读数 4
点赞 0
article_banner

在Linux环境下,将FlexNet许可证服务器配置为systemd服务,是实现开机自启动和服务崩溃自动恢复的标准做法。这篇文章提供一个可直接使用的systemd服务模板,并说明关键配置项的含义。


一、前置准备

在编写service文件之前,先完成以下准备工作:

1. 创建专用服务用户

不建议用root运行lmgrd。创建一个专用的系统用户:

bash

sudo useradd -r -s /bin/bash -m -d /opt/flexnet flexnet

2. 确认lmgrd路径

找到lmgrd和vendor daemon的完整路径。以Synopsys SCL为例:

bash

# 查找lmgrd位置
which lmgrd
# 通常输出: /opt/synopsys/scl/2021.03/linux64/bin/lmgrd

# 确认vendor daemon位置
ls -l /opt/synopsys/scl/2021.03/linux64/bin/snpslmd

3. 准备许可证文件和日志目录

bash

# 放置许可证文件
sudo mkdir -p /opt/flexnet/licenses
sudo cp /path/to/license.lic /opt/flexnet/licenses/

# 创建日志目录并赋予权限
sudo mkdir -p /var/log/flexnet
sudo chown -R flexnet:flexnet /opt/flexnet /var/log/flexnet

二、systemd服务文件模板

创建服务文件 /etc/systemd/system/flexnet.service

ini

[Unit]
Description=FlexNet License Server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=flexnet
Group=flexnet
WorkingDirectory=/opt/flexnet
Environment="LM_LICENSE_FILE=/opt/flexnet/licenses/license.lic"
ExecStart=/opt/synopsys/scl/2021.03/linux64/bin/lmgrd -c /opt/flexnet/licenses/license.lic -l /var/log/flexnet/debug.log
ExecStop=/opt/synopsys/scl/2021.03/linux64/bin/lmutil lmdown -c /opt/flexnet/licenses/license.lic -q
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

关键配置项说明


配置项含义
Type=forkinglmgrd启动后会在后台运行,符合forking类型
User/Group以flexnet用户身份运行,非root,更安全
ExecStart启动命令,建议使用完整路径,-l指定日志文件位置
ExecStop停止命令,用lmdown优雅关闭,-q表示安静模式
Restart=on-failure进程异常退出时自动重启
RestartSec=10重启前等待10秒
After=network-online.target确保网络已完全就绪后再启动

三、一个更健壮的版本:带环境变量和端口配置

如果lmgrd依赖特定环境变量(如VENDOR_LICENSE_DIR),可以在service文件中指定:

ini

[Unit]
Description=FlexNet License Server with Environment
After=network-online.target

[Service]
Type=forking
User=flexnet
Group=flexnet
WorkingDirectory=/opt/flexnet
Environment="LM_LICENSE_FILE=/opt/flexnet/licenses/license.lic"
Environment="SNPSLMD_LICENSE_FILE=27000@localhost"
Environment="PATH=/opt/synopsys/scl/2021.03/linux64/bin:/usr/local/bin:/usr/bin:/bin"
ExecStart=/opt/synopsys/scl/2021.03/linux64/bin/lmgrd -c /opt/flexnet/licenses/license.lic -l /var/log/flexnet/debug.log
ExecStop=/opt/synopsys/scl/2021.03/linux64/bin/lmutil lmdown -c /opt/flexnet/licenses/license.lic -q
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

额外配置说明


配置项含义
ExecReload支持systemctl reload flexnet重新读取许可证文件
LimitNOFILE=65536提高文件描述符限制,避免高并发时出现"Too many open files"
Environment中设置PATH确保lmdown等命令能正常调用

四、部署与常用管理命令

1. 重新加载systemd配置

bash

sudo systemctl daemon-reload

2. 启用开机自启动

bash

sudo systemctl enable flexnet

3. 立即启动服务

bash

sudo systemctl start flexnet

4. 查看服务状态

bash

sudo systemctl status flexnet

5. 查看实时日志

bash

sudo journalctl -u flexnet -f

6. 停止服务

bash

sudo systemctl stop flexnet

7. 重新读取许可证文件(不重启服务)

bash

sudo systemctl reload flexnet

五、故障排查:systemd启动失败怎么办

如果systemctl start flexnet失败,按以下顺序排查:

第一步:查看systemd日志

bash

sudo journalctl -u flexnet -n 50 --no-pager

第二步:以flexnet用户手动启动

切换到flexnet用户,手动执行启动命令,观察具体报错:

bash

sudo su - flexnet
/opt/synopsys/scl/2021.03/linux64/bin/lmgrd -c /opt/flexnet/licenses/license.lic -l /var/log/flexnet/debug.log

如果手动启动成功但systemd启动失败,问题出在环境变量差异——systemd启动时加载的环境变量与终端不同。

第三步:在service文件中显式设置所有必要的环境变量

手动启动时报No such file or directory但文件确实存在,通常是LSB依赖缺失或32位/64位不匹配。

第四步:检查日志目录权限

确保flexnet用户对/var/log/flexnet目录有写权限:

bash

sudo chown -R flexnet:flexnet /var/log/flexnet
sudo chmod 755 /var/log/flexnet

六、注意事项

1. 不要使用Type=simple

lmgrd启动后会立即fork到后台,如果使用Type=simple,systemd会认为服务启动失败。必须使用Type=forking

2. 避免使用-z参数

-z参数让lmgrd保持在前台运行,便于调试,但在生产环境中配合systemd使用时,应与Type=forking对应,确保服务正确进入后台。

3. ExecStop使用lmdown -q

-q参数让lmdown安静执行,避免因交互式确认导致停止命令卡住。

4. 多套FlexNet服务的处理

如果同一台服务器运行多套独立的FlexNet服务(不同软件厂商),创建多个service文件,如flexnet-synopsys.serviceflexnet-cadence.service,使用不同的端口和许可证文件,避免相互干扰。

七、总结

systemd服务配置的核心要点:

  • 用户隔离:专用非root用户运行
  • Type=forking:匹配lmgrd的后台运行方式
  • 网络依赖:After=network-online.target
  • 完整路径:ExecStart和ExecStop全部使用绝对路径
  • 环境变量:需要的变量在service文件中显式声明
  • 自动重启:Restart=on-failure提升可用性

按照上述模板配置,FlexNet许可证服务器就能在系统重启后自动启动,并在异常崩溃时自动恢复。


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空