【问题标题】:How to run a process in daemon mode with systemd service?如何使用 systemd 服务以守护程序模式运行进程?
【发布时间】:2020-08-24 07:49:41
【问题描述】:

我已经用谷歌搜索并阅读了很多关于此的博客、帖子等。我也一直在我的 EC2 实例上手动尝试它们。但是,我仍然无法正确配置 systemd 服务单元以使其按预期在后台运行进程。我正在运行的进程是 nessus 服务。这是我的服务单元定义:

$ cat /etc/systemd/system/nessusagent.service
[Unit]
Description=Nessus
[Service]
ExecStart=/opt/myorg/bin/init_nessus
Type=simple
[Install]
WantedBy=multi-user.target

这是我的脚本/opt/myorg/bin/init_nessus:

$ cat /opt/apiq/bin/init_nessus
#!/usr/bin/env bash
set -e

NESSUS_MANAGER_HOST=...
NESSUS_MANAGER_PORT=...
NESSUS_CLIENT_GROUP=...
NESSUS_LINKING_KEY=...

#-------------------------------------------------------------------------------
# link nessus agent with manager host
#-------------------------------------------------------------------------------
/opt/nessus_agent/sbin/nessuscli agent link --key=${NESSUS_LINKING_KEY} --host=${NESSUS_MANAGER_HOST} --port=${NESSUS_MANAGER_PORT} --groups=${NESSUS_CLIENT_GROUP}
if [ $? -ne 0 ]; then
    echo "Cannot link the agent to the Nessus manager, quitting."
exit 1
fi

/opt/nessus_agent/sbin/nessus-service -q -D

当我运行服务时,我总是得到以下信息:

$ systemctl status nessusagent.service
● nessusagent.service - Nessus
  Loaded: loaded (/etc/systemd/system/nessusagent.service; enabled; vendor preset: enabled)
  Active: inactive (dead) since Mon 2020-08-24 06:40:40 UTC; 9min ago
Process: 27787 ExecStart=/opt/myorg/bin/init_nessus (code=exited, status=0/SUCCESS)
Main PID: 27787 (code=exited, status=0/SUCCESS)

...
Aug 24 06:40:40 ip-10-27-0-104 init_nessus[27787]: + /opt/nessus_agent/sbin/nessuscli agent link --key=... --host=... --port=8834 --groups=...
Aug 24 06:40:40 ip-10-27-0-104 init_nessus[27787]: [info] [agent] HostTag::getUnix: setting TAG value to '8596420322084e3ab97d3c39e5c92e00'
Aug 24 06:40:40 ip-10-27-0-104 init_nessus[27787]: [info] [agent] Successfully linked to <myorg.com>:8834
Aug 24 06:40:40 ip-10-27-0-104 init_nessus[27787]: + '[' 0 -ne 0 ']'
Aug 24 06:40:40 ip-10-27-0-104 init_nessus[28506]: + /opt/nessus_agent/sbin/nessus-service -q -D

但是,我看不到我希望看到的过程:

$ ps faux | grep nessus
root   28565 0.0 0.0 12940  936 pts/0  S+  06:54  0:00             \_ grep --color=auto nessus

如果我手动运行最后一个命令,我可以看到它:

$ /opt/nessus_agent/sbin/nessus-service -q -D
$ ps faux | grep nessus
root   28959 0.0 0.0 12940 1016 pts/0  S+  07:00  0:00             \_ grep --color=auto nessus
root   28952 0.0 0.0  6536  116 ?      S   07:00  0:00 /opt/nessus_agent/sbin/nessus-service -q -D
root   28953 0.2 0.0 69440 9996 pts/0  Sl  07:00  0:00    \_ nessusd -q

我在这里错过了什么?

【问题讨论】:

  • 手动调用init_nessus 脚​​本时它是否也会运行?

标签: daemon systemd nessus


【解决方案1】:

最终发现这是因为最后一个命令中额外的-D 选项。删除 -D 选项解决了这个问题。在系统管理器中以守护程序模式运行进程不是要走的路。我们需要在前台运行它,让系统管理器来处理。

【讨论】:

    最近更新 更多