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 记录的退出代码解析回调中的错误,以确定它是否是实际错误或不是您的用例。
我正在使用 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 记录的退出代码解析回调中的错误,以确定它是否是实际错误或不是您的用例。