CentOS 7 systemctl - 无反馈或状态/输出

CentOS 7 systemctl - 无反馈或状态/输出

systemctl我刚刚在一台服务器上安装了 CentOS 7.1,但我对它与之相比的工作原理感到困惑service

在 CentOS 6 上,运行时我会得到反馈service,例如:

root@centos6 [~]# service mysql restart
Shutting down MySQL........................................[  OK  ]
Starting MySQL.............................................[  OK  ]

root@centos6 [~]# service mysql status
MySQL running (910285)                                     [  OK  ]
root@centos6 [~]#

但是在 CentOS 7 上,当我使用 时systemctl,什么也没得到。我不知道发生了什么,甚至不知道是否发生了什么:

root@centos7 [~]# systemctl restart mysql
root@centos7 [~]# /bin/systemctl restart  mysql.service

# Nothing happened

当我service在 CentOS 7 上运行时,发生了以下情况:

root@centos7 [~]# service mysql restart
Redirecting to /bin/systemctl restart  mysql.service

我错过了什么?

答案1

这是我的做法:

systemctl start my-service && journalctl -fexu my-service

journalctl是从 systemd 服务获取输出的最简单方法。

  • -fmy-service遵循直到我退出(ctrl-C)的日志输出。
  • -e滚动到末尾(最新)日志消息。
  • -x如果有的话,请查阅期刊信息目录中的解释。
    (另见 https://www.freedesktop.org/wiki/Software/systemd/catalog/
  • -u将仅显示来自该my-service单元的日志。

答案2

与任何好的 unix 命令一样,systemctl除非出现问题,或者您运行了明确需要输出的命令,否则不会输出任何内容。如果您看不到任何内容,则表示命令成功。

如果您愿意,您可以运行systemctl status mysql来查看其当前状态。

答案3

我对此的“解决方案”(很久以前就做过)是编写一个小脚本,基本上按照上面的答案之一的建议执行:systemctl restart myservice,然后立即执行 systemctl status myservice,这样您只需运行重新启动,然后获取状态。我也同意这是一个不必要的解决方案,因为 systemctl 应该已经实现了详细/状态选项,但事实就是如此。

答案4

不幸的是,systemctl它不像大多数 Unix 命令那样提供“详细”选项。

一种解决方案是增加到SYSTEMD_LOG_LEVELdebug这里info没用),然后过滤输出,例如:

$ SERVICES="smartmontools cron xxxxx"
$ SYSTEMD_LOG_LEVEL=debug systemctl restart $SERVICES 2>&1|egrep "Got result .* for job|Failed"
Failed to restart xxxxx.service: Unit xxxxx.service not found.
Got result done/Success for job cron.service
Got result done/Success for job smartmontools.service

您还可以添加前缀,例如

$ SYSTEMD_LOG_LEVEL=debug systemctl restart $SERVICES 2>&1|egrep -i "Got result .* for job|Failed"|sed 's,^,restart: ,'
restart: Failed to restart xxxxx.service: Unit xxxxx.service not found.
restart: Got result done/Success for job cron.service
restart: Got result done/Success for job smartmontools.service

SYSTEMD_LOG_LEVEL可能并非在所有系统上都可用。

相关内容