24

我正在尝试添加我的第一个服务rhel7(位于 AWS/EC2 中),但是 - 服务配置不正确 - 我得到:

[ec2-user@ip-172-30-1-96 ~]$ systemctl status clouddirectd.service -l
● clouddirectd.service - CloudDirect Daemon
   Loaded: loaded (/usr/lib/systemd/system/clouddirectd.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2018-01-09 16:09:42 EST; 8s ago
 Main PID: 10064 (code=exited, status=217/USER)

Jan 09 16:09:42 ip-172-30-1-96.us-west-1.compute.internal systemd[1]: clouddirectd.service: main process exited, code=exited, status=217/USER
Jan 09 16:09:42 ip-172-30-1-96.us-west-1.compute.internal systemd[1]: Unit clouddirectd.service entered failed state.
Jan 09 16:09:42 ip-172-30-1-96.us-west-1.compute.internal systemd[1]: clouddirectd.service failed.

还:

[ec2-user@ip-172-30-1-96 ~]$ systemctl is-active clouddirectd
activating
[ec2-user@ip-172-30-1-96 ~]$ sudo systemctl list-units --type service --all | grep clouddirectd
  clouddirectd.service                                  loaded    activating auto-restart CloudDirect Daemon

我的单位文件是:

[ec2-user@ip-172-30-1-96 ~]$ cat /usr/lib/systemd/system/clouddirectd.service
[Unit]
Description=CloudDirect Daemon
After=network.target

[Service]
Environment=AWS_SHARED_CREDENTIALS_FILE=/etc/sonar/.aws/credentials
#ExecStart=/usr/lib/sonar/clouddirect/virtualenv/bin/python /usr/bin/sonar/clouddirectd -c /etc/sonar/clouddirect/clouddirectd.conf
ExecStart=/usr/lib/sonar/clouddirect/virtualenv/bin/python /usr/bin/clouddirect -c /etc/sonar/clouddirect.conf
# @PERM@ allow group write permission on newly created files
UMask=0007
#User=clouddirectd
User=clouddirect
Group=sonar
KillSignal=SIGINT
TimeoutStopSec=60min
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

你能建议如何调试这个 systemctl 服务,这样它就不会一直死掉和自动重启吗?

4

2 回答 2

50

错误 217 表示在服务尝试启动时用户不存在。在您的情况下,您的服务中指定的用户是clouddirect.

 Main PID: 10064 (code=exited, status=217/USER)

Jan 09 16:09:42 ip-172-30-1-96.us-west-1.compute.internal systemd[1]: clouddirectd.service: main process exited, code=exited, status=217/USER

如果这不是实际的用户名(例如,如果它有拼写错误),则可能会导致这种情况,如果用户是某个外部用户存储(例如:LDAP 或 Active Directory)的一部分并且需要的服务也可能会导致这种情况启动允许 Linux 服务器访问外部用户存储尚未启动。例如vasd.service,启动用于允许 Linux 对 Active Directory 进行身份验证的产品,如果vasd.service未启动并且您指定了仅在 Active Directory 中可用的用户,则您希望在您的After=行中添加该服务。例如:

After=network.target vasd.service
于 2018-08-09T18:18:52.083 回答
0

这个问题有两个部分。一个是如何诊断 217/USER,另一个是如何修复它。我只关注前者。

对于 217/USER,这里有一些很好的建议:

https://www.reddit.com/r/linuxquestions/comments/oaya49/systemd_service_not_starting_with_status217/

217 并不“总是”意味着这是一个用户问题,它只是意味着它以 217 退出。可能会或可能不会......

您可以使用 journalctl 来查看哪些服务“似乎在它出现后出现”的日志,或者什么不是。

系统启动时“网络用户”可能尚不可用,您可以通过添加After=nss-user-lookup.target https://systemd.io/UIDS-GIDS/来解决此问题,但此处并非如此,因为它仍然失败重启后,也就是后来。systemd 期望在服务启动时指定的用户“可用”。因此,对于“系统用户”(启动早期运行的进程),他们需要在本地机器上可用。对于后来启动的进程,他们可以是“网络用户”。

您还可以尝试将您的组和用户名(和环境)更改为您“认为” systemd 正在运行的内容并手动运行它,看看会发生什么。 https://serverfault.com/questions/410577/execute-a-command-from-another-group 希望 systemd 输出更多调试,以便您可以更轻松地判断它正在运行什么......

在某些奇怪的情况下,您可能需要同时指定 User= 和 Group= https://superuser.com/a/1452367/39364

在我们的例子中,运行“vintela status”有一条消息“SELinux 可能没有正确配置”,果然,在禁用 SELinux 后,它开始按预期工作,不再是 217。[redhat 8]

于 2022-01-11T18:04:53.690 回答