sor*_*rin 14 debian systemd sysvinit
直到最近,还有一种简单有效的方法来启动/停止/重启服务:
service nginx start|stop|restart
Run Code Online (Sandbox Code Playgroud)
这么多年以来,这一直很好,直到发行版切换到 systemd,现在我面临着 Debian/Ubuntu 系统,其中service脚本什么都不做(因为我应该使用诸如systemctl start nginx.service(更长的时间,没有自动-完成工作,...)
我的问题专门针对 Debian 和 Ubuntu,但涵盖 CentOS/RedHat 发行版也会有所帮助。
如果不清楚,我正在寻找一种一致的方法来处理这些问题,该方法适用于 Debian 7.x、8.x、最新的 Ubuntu LTS 和非 LTS。
附注。在此特定问题的范围之外,但如果解决方案还涵盖服务的启用和禁用部分,则会获得额外的荣誉。
在其错综复杂的历史中,在 Unix 平台上出现了许多不同的引导和服务控制系统。
service\chkconfig您发现的简单有效的基础系统通常被称为SysVinit风格,并且是朝着某种标准化方向迈出的重要一步。你会在 RHEL/CentOS(EL) 到 6 版本、Fedora 到 14 以及直到 2015 年基于 Debian/Ubuntu 的发行版上找到这种引导方式。不过,它不是唯一的引导系统,(更简单的)BSD 风格init 系统仍然有很多粉丝。
SysVinit 不是一个完美的解决方案(什么是?),而Systemd旨在克服许多问题;这是systemctl您现在正在体验的基于命令的系统。尽管它不是普遍喜欢的(人们讨厌变化、膨胀等),但毫无疑问,它正在迅速成为大多数发行版的事实上的标准。
因此,立即期待您的原始问题的答案很简单:控制大多数Linux 发行版中的服务
的标准方法是现在!systemctl
这将持续多久是任何人的猜测;可能只是在出现更好的并被广泛采用之前。
我敢肯定会有可用的包装器允许您当前最喜欢的service/chkconfig命令继续做大部分理智的事情,但是对于这种特殊的学习曲线,最好不要与它作斗争。也许展望未来,一段时间内还会有systemctl旧系统的包装器,以使管理它们与更新的系统一起减少痛苦;)
[它]
service用调用servicectl[sic]的包装器替换旧命令是否有意义?是的,但是 [...] 一个包装器可以处理它,使用户更顺利地过渡到 systemd。
......正如其他人在评论中所说的,这就是很久以来所做的事情。
/usr/sbin/serviceDebian 8 上的命令是 sysvinit-utils 包的一部分。它自 2009 年以来一直存在。它是对原始 sysvinit 源包的特定于 Debian 的 RedHat 起源的补充,从阅读脚本可以看出,它识别 systemd 运行和新贵工作的存在,将命令输出到systemctl和initctl(通过其别名)分别。它自 2013 年以来一直这样做。
service name action即使在非 Linux 操作系统上也可以广泛使用。它甚至适用于大多数 BSD,因为它们也有自己的service命令。servicenosh 包中还有一个 shim命令可以转换为. 但 …system-control action name
service命令。service命令具有众所周知的长期存在的问题,系统管理员几十年来一直在讲述这些战争故事。启用和禁用服务是类似的情况。尽管 SuSEchkconfig程序(可用于 Debian 和 Ubuntu 打包)与 Fedora 程序非常不同(它们用完全不同的编程语言编写,甚至——一种编译的,一种解释的),但有一个共同的最小语法,动作是或. 但 …chkconfig name actiononoff
chkconfigBSD上没有,因为用于此的传统工具要么sysrc是最近的 OpenBSDrcctl enable和rcctl disable. nosh 包中有chkconfigand rcctlshims 可转换为and 。system-control enable namesystem-control disable namechkconfig知道systemd并作为一个垫片systemctl enable和systemctl disable。SuSEchkconfig对 systemd 一无所知。script/service. 初始化系统助手。Debian 源档案。telinit. 小吃指南。1.20. JdeBP 的软件。service。小吃页。JdeBP 的软件。service. §8. FreeBSD 手册页。