我正在使用 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
及其子命令status
、start
、stop
、enable
、 和disable
service
update-rc.d
和invoke-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 个人来说,这几乎是那么容易。
进一步阅读
- https://unix.stackexchange.com/a/233840/5132
- 斯蒂芬·韦德利 (2014)。 “8. 使用 systemd 管理服务” 红帽企业 Linux 7 系统管理员指南。红帽。
- 伦纳特·珀特林 (2013-10-07)。
systemctl
。 systemd 手册页。 freedesktop.org。