![无法使用 systemd 停止使用命令创建的进程的服务](https://linux22.com/image/199360/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20systemd%20%E5%81%9C%E6%AD%A2%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%88%9B%E5%BB%BA%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%9C%8D%E5%8A%A1.png)
我设法以两种不同的方式启动服务
- 使用普通命令
root@ip-172-31-35-92:/#/usr/bin/mongod --config /etc/mongod_27018.conf &
- 使用系统服务。
service mongod_27018 start
当我以任何一种方式启动服务时,都会生成不同的 PID。
问题陈述
当我使用命令启动服务时,我无法停止使用 systemd service mongod_27018 stop
。为了使用systemctl start/stop/restart,我需要手动杀死进程IDkill -9 $PID
有没有办法可以停止服务,即使它是从命令启动的?
单元文件内容
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network-online.target
Wants=network-online.target
[Service]
User=mongodb
Group=mongodb
EnvironmentFile=-/etc/default/mongod
ExecStart=/usr/bin/mongod --config /etc/mongod_27018.conf
PIDFile=/var/run/mongodb/mongod_27018.pid
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
LimitMEMLOCK=infinity
TasksMax=infinity
TasksAccounting=false
[Install]
WantedBy=multi-user.target
答案1
该命令service mongod_27018 start
使用进程管理器管理进程,无论它是否systemd
可用。sysvinit
流程管理器可以轻松启动/停止流程并检查其状态。
流程管理器只会跟踪它直接管理的流程。当您运行命令时/usr/bin/mongod --config /etc/mongod_27018.conf &
,进程管理器不知道跟踪进程,并且需要手动向进程发送信号来管理它。
如果您必须管理手动运行的命令,那么您将需要某种方法来跟踪它们,这可以使用进程 ID (PID) 来完成。示例中的命令应输出进程的 PID,或者您可以使用特殊bash
变量$!
来获取最后一个命令的 PID。