升级到 Jessie 后,服务控制不返回结果

升级到 Jessie 后,服务控制不返回结果

实际上不是 debian,而是 Raspbian Wheezy 到 Raspbian Jessie。我使用 Raspbian 官方论坛上找到的一些命令对其进行升级。

猫 /etc/debian_version = 8.0.

问题是,当我重新启动服务时,我看不到任何结果。

升级前(喘息):

# service tor restart
[ok] cccc
[ok] ddd
# _

升级后(杰西):

# service tor restart
# _

所有结果都写入 /var/log/syslog...我怎样才能恢复这个东西?我想查看实际结果,而不是写入日志。

答案1

service现在由 systemd 处理,当一切顺利时 systemd 很安静。似乎没有办法改变这一点。伦纳特添加了一个 TODO 项目添加一个详细模式恢复行为类似于您所追求的,但三年后它仍然在待办事项列表中

你总是可以定义一个 shell 函数来做类似的事情

service tor restart && echo '[OK]' || echo '[Failed]'

tor替换为$1,以及命令中您想要的任何消息echo),但这不会为您提供运行多个命令的单元的详细信息。

systemctl status tor

将向您显示相关单元的详细状态,因此另一种选择是将其与start或结合起来restart

答案2

很多服务出错,有些服务总是返回成功,即使服务没有启动,因为 systemd 正在启动一种服务管理器而不是服务本身......而且我得到的结果是不信任服务状态很多时候,“启动正常”,服务实际上没有运行,没有任何反馈!所以还是没有解决问题!但是,如果您运行journal -xe 比这样做要好得多,但还不够好,因为您需要每次都运行它并记住它。 – @Luciano Andress Martini

“无结果”表示操作成功。这是 UNIX 的默认设置。例如,这就是cpor命令的行为方式。rm

如果您的服务编写不正确,它可能会返回成功,然后立即失败,例如当它读取错误的配置时。这是服务中的错误!如果 sysvinit 脚本的行为与此类似,您也会遇到完全相同的问题!没有systemd办法解决这个问题。

当您的单元出现故障时,有一个技巧可以仅查看守护程序中的最后 10 行。systemctl status以 root 用户身份运行(即sudo)。或者,您可以将您的用户添加为其中一个组systemd-journal或 的成员adm

当我需要超过最后 10 行时,我使用journalctl -u tor -b,表示当前启动中的所有内容。或者,如果您在当前启动过程中多次重新启动它,您可能需要使用journalctl -u tor --since=-1hour.或者简称为--since=-1h

我认为systemctl已经建议您systemctl status在设备无法启动时运行。 (不幸的是,systemctl 从未提及权限问题)。

systemctl确实也建议journalctl -xe。就我个人而言,我认为这是没有帮助的。 -x大多数情况下只会增加很多噪音。 -e跳过例如 stdout/stderr 消息以及任何其他未明确标记为错误消息的内容。 (抱歉,它甚至会跳过 stderr 消息。更改此设置很尴尬:它将允许 stderr 行与 stdout 重新排序,这对于 shell 脚本来说可能是不受欢迎的)。


有类似的用户投诉在 systemd 问题跟踪器上,其中涉及一些其他有问题的服务。 (或者,其中之一看起来可能是故意地在长时间的网络超时后,“在后台”失败。再说一次,这正是服务的编写方式,它不是 systemd 试图惹恼您)。

相关内容