首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何调试失败的systemctl服务(code=exited,status=217/USER)?

如何调试失败的systemctl服务(code=exited,status=217/USER)?
EN

Stack Overflow用户
提问于 2018-01-09 20:32:29
回答 2查看 82.2K关注 0票数 32

我试图在rhel7上添加我的第一个服务(它驻留在AWS/EC2中),但是-该服务没有正确配置-正如我得到的:

代码语言:javascript
运行
复制
[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.

另外:

代码语言:javascript
运行
复制
[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

我的单位档案是:

代码语言:javascript
运行
复制
[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

,你能建议如何调试这个系统Can服务,这样它就不会死机并自动重新启动吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-09 18:18:52

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

代码语言:javascript
运行
复制
 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或)的一部分,并且需要启动允许Linux服务器访问外部用户存储的服务还没有结束。例如,vasd.service启动一个用于允许Linux针对Active Directory进行身份验证的产品,如果vasd.service没有启动,并且您已经指定了一个仅在Active中可用的用户,则需要在After=行中添加该服务。例如:

代码语言:javascript
运行
复制
After=network.target vasd.service
票数 61
EN

Stack Overflow用户

发布于 2022-01-11 18:04:53

这个问题有两部分。一个是如何诊断217/用户,另一个是如何修复它。我把注意力集中在前者上。

对于217/用户,这里有一些很好的提示:

status217/

217并不意味着它是一个用户问题,它只是意味着它退出了217。可能或不可能..。

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

在系统启动时,“网络用户”可能还没有可用,您可以通过添加After=nss-user-lookup.target https://systemd.io/UIDS-GIDS/来修复这个问题,尽管这里不是这样的,因为它在重新启动之后仍然会失败,这是稍后的事。当服务启动时,systemd期望指定的用户“可用”。因此,对于“系统用户”(启动早期运行的进程),它们需要在本地框上可用。对于以后开始的进程,它们可以是“网络用户”。

您还可以尝试将您的组和用户名(和环境)更改为“认为”系统正在运行的内容,并手动运行它,看看会发生什么。https://serverfault.com/questions/410577/execute-a-command-from-another-group类型的希望系统输出更多的调试,这样您就可以更容易地知道它正在运行的是什么。

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

在我们的示例中,运行"vintela“时有一条消息"SELinux可能没有正确配置”,并且足够确定的是,在禁用SELinux之后,它开始按预期工作,不超过217。redhat 8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48176240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档