Childprocess.exec 函数在服务不活动时给出错误

Childprocess.exec function giving an error when service is inactive

我正在使用 CentOS 7 服务器,节点版本 10.23.0,子进程版本 6.14.9,我应该观察给定服务的状态。

为此,我使用格式为 systemctl status servicename 的 Childprocess.exec 函数。此命令在服务处于活动状态时正常运行,但在服务处于非活动状态时出错。在命令行中,尽管服务处于状态,但一切正常。

我试过使用systemctl is-active servicename,但也有错误。我不知道是什么原因。错误信息是

{Error: Command failed: systemctl status crond
   at ChildProcess.exithandler (child_process.js:294:12)
   at ChildProcess.emit (events.js:198:13)
   at maybeClose (internal/child_process.js:982:16)
   at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
 killed: false,
 code: 3,
 signal: null,
 cmd: 'systemctl status crond' }

注意:我应该使用子进程。

Systemctl 的退出代码在 man systemctl 中记录为:

EXIT STATUS
       On success, 0 is returned, a non-zero failure code otherwise.

       systemctl uses the return codes defined by LSB, as defined in LSB 3.0.0[2].

       Table 3. LSB return codes
       ┌──────┬───────────────────────────┬──────────────────────────┐
       │Value │ Description in LSB        │ Use in systemd           │
       ├──────┼───────────────────────────┼──────────────────────────┤
       │0     │ "program is running or    │ unit is active           │
       │      │ service is OK"            │                          │
       ├──────┼───────────────────────────┼──────────────────────────┤
       │1     │ "program is dead and      │ unit not failed (used by │
       │      │ /var/run pid file exists" │ is-failed)               │
       ├──────┼───────────────────────────┼──────────────────────────┤
       │2     │ "program is dead and      │ unused                   │
       │      │ /var/lock lock file       │                          │
       │      │ exists"                   │                          │
       ├──────┼───────────────────────────┼──────────────────────────┤
       │3     │ "program is not running"  │ unit is not active       │
       ├──────┼───────────────────────────┼──────────────────────────┤
       │4     │ "program or service       │ no such unit             │
       │      │ status is unknown"        │                          │

在你的输出中你有 code: 3,所以它告诉你你已经知道的,服务未激活,但因为它以非零代码退出 exec() 认为它是一个错误。

当你说它在命令行上运行良好时,它实际上以完全相同的方式运行,但你不会注意到退出代码是 3,除非你事后检查变量 $?

您可以根据 systemctl 记录的退出代码解析回调中的错误,以确定它是否是实际错误或不是您的用例。