我正在开发一个.service
文件,以便systemd
可以在 Amazon Linux 2 上管理应用程序即服务。但是当我输入 时systemctl start my-new-service
,日志中报告以下错误:
Mar 24 hh:mm:ss the.host.name systemd[1]: my-new-service.service: main process exited, code=exited, status=10/n/a
status=10/n/a
此错误消息中指的 是什么呢?
请解释如何解释各种可能的状态代码,如果摘要对于本论坛来说太长,也许可以提供一个完整解释的链接。
答案1
该消息意味着您的.service
文件启动的应用程序ExecStart=
已退出,并在退出时将返回代码设置为 10。
关于结果代码没有单一的统一标准(尽管有几个部分标准和约定),因此找出代码 10 含义的唯一方法是阅读该特定应用程序的文档......或其源代码,如果文档没有指定它。
因此 systemd 不知道代码 10 的含义,因此它添加了 n/a 来表示 systemd 没有可用的口头描述。您还没有告诉我们有问题的应用程序是什么,因此我们无法为您进一步查找结果代码 10。
在 的文档中systemd
,有几个结果代码约定表。总结一下:
- C 库基本上只定义 0 表示正常,1(或任何非零值)表示失败
- 这Linux 标准库 (LSB) 有定义对于代码 2...7,用于设计用作服务的东西(或最初用于 SysVinit 样式的服务启动脚本)
LSB 规范表明代码 200 及以上将是特定于实现的,因此
systemd
为自身生成的错误定义了该范围内的一组代码systemd
。BSD 操作系统定义了一组通用退出代码,范围为 64..78。
/usr/include/sysexits.h
如果系统上已安装 C 开发包,这些代码的定义通常也可在 Linux 系统上使用,在文件 中。
但这些都没有提及代码 10,因此在不了解相关应用程序的情况下无法进行猜测。
答案2
10
是主进程的返回值。经过习俗每个非零退出代码都被视为失败,其中数字应该理想地指示出了什么问题。
n/a
代表不适用或不可用(参见。https://en.wikipedia.org/wiki/N/a),这意味着没有符号名称退出代码10 已定义,因此它并不能表明出了什么问题。
简而言之,出现了问题(或者您的脚本/程序错误地返回 10)。