无法使用 systemd 停止使用命令创建的进程的服务

无法使用 systemd 停止使用命令创建的进程的服务

我设法以两种不同的方式启动服务

  1. 使用普通命令
root@ip-172-31-35-92:/#/usr/bin/mongod --config /etc/mongod_27018.conf &
  1. 使用系统服务。
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。

相关内容