实际上不是 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 的默认设置。例如,这就是cp
or命令的行为方式。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 试图惹恼您)。