如何使用systemd服务在守护程序模式下运行进程?

问题描述

我已经在Google上搜索并阅读了很多博客,帖子等。我也一直在我的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

在这里想念什么?

解决方法

最终发现这是由于最后一个命令中额外的-D选项所致。删除-D选项可以解决此问题。在系统管理器内以守护程序模式运行该进程不是可行的方法。我们需要在前台运行它,然后让系统管理员来处理它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...