不要/etc/init.d/直接运行脚本。

不要/etc/init.d/直接运行脚本。

我正在使用 Debian Jessie,当我尝试使用 init.d 中的一些脚本(启动、停止、重新启动)时。有些函数log_failure_msg log_daemon_msg log_end_msg应该在标准输出上提供一些内容,但事实并非如此。我记得在旧版本的 Debian 中它可以正常工作。即使尝试使用失败的脚本,它也总是得到相同的输出:

kuban@lenovo-y510p:/etc/init.d$ sudo /etc/init.d/parstart restart

[ ok ] 重新启动 parstart(通过 systemctl):parstart.service。

答案1

我正在尝试使用init.d[...]中的一些脚本

不要/etc/init.d/直接运行脚本。

在 systemd 操作系统上,无法保证这些脚本存在,更不用说它们是指定您的服务的脚本了。即使在 Debian 7 上,也有 systemd 单元取代了 System 5rc脚本;在 Debian 8 上更是如此。正确使用的命令是:

  • systemctl及其子命令statusstartstopenable、 和disable
  • service
  • update-rc.dinvoke-rc.d,但前提是您是包维护者脚本

这正是发生在你身上的事情。您对脚本的直接调用将被替换,通过广泛使用的 Debian 脚本函数库中的钩子,调用(在本例中)

systemctl restart parstart.service

您甚至可以在您面前的输出中看到这一点。就是这个(via systemctl): parstart.service意思。显然,它远非失败成功告诉 systemd 重新启动服务。

脚本中的交互式花哨功能rc(包括彩色消息)不再有效。您的服务不作为 的子进程运行systemctl。它作为子进程运行,systemd并且与您交互运行命令的终端具有零连接。

无论如何,所有这些/etc/szarp/parstart.cfg脚手架和日志消息生成对于 systemd 来说都是完全不必要的。 systemd 提供了用于启用和禁用服务以及自动重新启动服务的跨服务机制。它会记录启动和停止服务的时间,而无需服务执行此操作。根据我的计算,该rc脚本可以很简单地替换为 16 个普通.service单元,每个单元对应一个服务。下面是这样的:

[单元]
描述=SZARP pserver-lite 服务器
之后=网络.目标

[服务]
类型=简单
ExecStart=/usr/local/bin/pserver-lite --no-daemon

[安装]
WantedBy=多用户.target

打电话/usr/local/etc/systemd/system/pserver-lite.service,跑systemctl daemon-reload,然后……

  • ...有可用的状态信息systemctl status pserver-lite.service
  • ...您可以使用 使其在引导程序中运行systemctl enable pserver-lite.service
  • …您可以使用 来查看 systemd 的启动和停止日志条目journalctl

对于其他 15 个人来说,这几乎是那么容易。

进一步阅读

相关内容