注册
systemctl与DmService服务冲突
专栏/技术分享/ 文章详情 /

systemctl与DmService服务冲突

打工人小赵 2025/09/26 84 0 0
摘要

问题现象:
1)使用服务名方式启动达梦数据库服务,启动成功
2)使用systemctl方式关闭达梦数据库服务,此时会发现关闭失败
3)使用systemctl status状态查询异常,实际running,显示failed

步骤一:使用注册的服务脚本方式启动达梦数据库
[dmdba@dm1:~/dmdbms/bin]$ ./DmServiceDMSERVER start
Starting DmServiceDMSERVER:                                [ OK ]
You have new mail in /var/spool/mail/dmdba
步骤二:使用systemctl关闭数据库服务
[dmdba@dm1:~/dmdbms/bin]$ systemctl stop DmServiceDMSERVER.service 
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root (roo)
Password: 
==== AUTHENTICATION COMPLETE ===
步骤三: 使用systemctl status的方式查看数据库服务状态
[dmdba@dm1:~/dmdbms/bin]$ systemctl status DmServiceDMSERVER.service 
● DmServiceDMSERVER.service - DM Instance Service(DmServiceDMSERVER).
   Loaded: loaded (/usr/lib/systemd/system/DmServiceDMSERVER.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2025-09-19 20:46:24 EDT; 7min ago
发现数据库服务并没有关闭,依旧存在
[dmdba@dm1:~/dmdbms/bin]$ ps -ef|grep dmserver
dmdba     5320     1  1 20:50 pts/0    00:00:03 /home/dmdba/dmdbms/bin/dmserver path=/dbdata/dmdata/DAMENG/dm.ini -noconsole
dmdba     5584  4794  0 20:55 pts/0    00:00:00 grep --color=auto dmserver

问题原因:
1)查看systemctl注册的DmServiceDMSERVER.service 脚本定义

[dmdba@dm1:~/dmdbms/bin]$ cat /usr/lib/systemd/system/DmServiceDMSERVER.service
[Unit]
Description=DM Instance Service(DmServiceDMSERVER).
After=network.target remote-fs.target

[Service]
Type=forking
PIDFile=/home/dmdba/dmdbms/bin/pids/DmServiceDMSERVER.pid
ExecStart=/home/dmdba/dmdbms/bin/DmServiceDMSERVER start
ExecStop=/home/dmdba/dmdbms/bin/DmServiceDMSERVER stop
PrivateTmp=true
User=dmdba

TasksMax=infinity
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000

[Install]
WantedBy=multi-user.target
You have new mail in /var/spool/mail/dmdba

systemctl是系统管理服务命令,正常情况下
systemctl start DmServiceDMSERVER20250731 会调用./DmServiceDMSERVER start
systemctl stop DmServiceDMSERVER20250731 会调用./DmServiceDMSERVER stop
systemctl status是自己进行保存相关进程状态
如使用注册的脚本即DmServiceDMSERVER start启动,则systemctl无法查询到进程的状态
由于systemctl无法查询到进程的状态,所以执行systemctl stop命令,不会触发./DmServiceDMSERVER20250731 stop

小结
systemctl与服务名,二选一,别混用! 避免踩坑,保障服务状态清晰可控
用systemctl启动就用systemctl去停止和查询状态,如下是systemctl的注意事项
在 systemd 环境下,可使用 systemctl 命令进行系统服务的管理,但 systemctl 命令只能管理 systemd 环境下的系统服务。
详细用法说明如下:
1.systemctl 只能停止由 systemctl 启动的系统服务及相关进程,
2.systemctl 只能查询由 systemctl 启用/停止的系统服务的状态,
3.systemctl 只能启用/禁用 systemd 环境下的系统服务。
4.DMDSC 环境下,使用 systemctl 命令停止集群中的节点服务时,必须依次停止各个节点服务,即仅当一个服务成功停止后才能停止下一个服务。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服