我在 Debian 8 桌面上使用 CrashPlan。我有一个脚本,我必须在开始时停止 CrashPlan 服务,然后在退出之前启动它。我正在使用
/etc/init.d/crashplan start
重新启动,但新的 CrashPlan 进程在终止时退出我的脚本。我切换到
service crashplan start
一切都很好!
奇怪的是,在另一个机器上的 Ubuntu 16.04 下, 好吧,现在 Ubuntu 也给了我同样的问题。init.d
脚本/命令的行为符合预期。当我的脚本退出时,CrashPlan 继续运行。
我的 Debian 脚本现在可以运行了。但我的印象是该service
命令即将被弃用,因此我对Debian 和 Ubuntu 的当前版本之间的差异init.d
感到困惑。service
答案1
在任何使用 systemd 的系统上,直接运行 init.d 脚本并不是启动服务的最佳方式,因为它将绕过通常由 systemd 本身完成的所有设置和簿记。此外,您甚至可能没有初始化脚本,该服务可能仅在单元文件中描述。
对于“旧式”sysvinit,没有太多的簿记工作要做:启动服务与运行脚本大致相同。这并不意味着直接使用 init 脚本是一个好主意,手册页中的描述service
告诉您原因:
service
在尽可能可预测的环境中运行 System V init 脚本或 upstart 作业,删除大多数环境变量并将当前工作目录设置为 /。
随机 shell 不是一个非常可预测的环境,您可能会激活文件或进程限制。
至于弃用,也许您应该使用systemctl
,但在 Debian 上service
实际上会尝试做正确的事情并systemctl
为您运行。 (假设 ifservice
已被弃用,那么直接运行 init 脚本就更是如此。)
(我不是一个足够的 systemd 专家,无法告诉您如果直接运行 init 脚本,到底是什么杀死了服务。这还取决于运行您正在运行的脚本的内容:从 cron、从命令行、从其他东西。 ..)