进一步阅读

进一步阅读

直到最近,还有一种简单有效的方法来启动/停止/重新启动服务:

service nginx start|stop|restart

这多年来一直运行良好,...直到发行版切换到 systemd,现在我面对的是 Debian/Ubuntu 系统,其中脚本service不执行任何操作(因为我应该使用类似的东西systemctl start nginx.service(更长时间,没有自动-完成工作,...)

我的问题特别涉及 Debian 和 Ubuntu,但涵盖 CentOS/RedHat 发行版也会有帮助。

如果不清楚,我正在寻找一种一致的方法来处理这些问题,一种适用于 Debian 7.x、8.x、最新的 Ubuntu LTS 和非 LTS 的方法。

附言。超出了这个特定问题的范围,但如果解决方案还涵盖服务的启用和禁用部分,则会获得额外的荣誉。

答案1

在其错综复杂的历史中,Unix 平台上出现了许多不同的引导和服务控制系统。

service\chkconfig您找到的基础系统简单有效一般被称为系统初始化风格,并且是迈向某种标准化的重要一步。您会在 RHEL/CentOS(EL) 到 6 版本、Fedora 到 14 以及 2015 年之前的基于 Debian/Ubuntu 的发行版上找到这种启动方式。不过,(更简单的)BSD 样式并不是唯一的启动系统init系统仍然有很多粉丝。

SysVinit 不是一个完美的解决方案(什么是?)系统旨在克服许多问题;这是systemctl您现在正在体验的基于命令的系统。尽管它并没有受到普遍的欢迎(人们讨厌改变、膨胀等),但毫无疑问它正在迅速成为大多数发行版的事实上的标准。

因此,立即期待您原来问题的答案很简单:
标准控制跨服务的方式最多Linux 发行版现已推出systemctl
每个人都在猜测这种情况会持续多久。可能直到出现一些事情更好的并被广泛采用。

我确信会有包装器允许您当前最喜欢的service/chkconfig命令继续执行大部分理智的事情,但由于这种特殊的学习曲线,最好不要与之抗争。也许展望未来,一段时间内还会有systemctl旧系统的包装器,以使管理它们与更当前的系统一起不那么痛苦;)

答案2

service用调用 [sic] 的包装器替换旧命令是否有意义servicectl

是的,但是 [...] 包装器可以处理它,使用户能够更顺利地过渡到 systemd。

……正如其他人在评论中所说,很久以来所做的事情

Debian 8 上的命令/usr/sbin/service是 sysvinit-utils 软件包的一部分。它自 2009 年以来一直存在。它是对原始 sysvinit 源代码包的 Debian 特定的、源自 RedHat 的补充,从阅读脚本可以看出,它识别 systemd 运行和新贵作业的存在,将命令外包给systemctlinitctl(通过其别名)分别。自 2013 年以来,它一直在这样做。

service name action即使在非 Linux 操作系统上也非常广泛可用。它甚至可以在大多数 BSD 上运行,因为它们也有自己的service命令。servicenosh 包中还有一个 shim命令,可转换为.但 …system-control action name

  • …超出了这个公共子集,周围的兼容性就会少得多。
  • … OpenBSD 没有service命令。
  • … BSDservice命令存在着长期存在的众所周知的问题,系统管理员几十年来一直在讲述这些问题。

启用和禁用服务的情况类似。尽管 SuSEchkconfig程序(可用于 Debian 和 Ubuntu 的打包)与 Fedora 程序有很大不同(它们是用完全不同的编程语言编写的,甚至一种是编译的,一种是解释的),但有一个共同的最小语法,chkconfig name action行动onoff.但 …

  • …再次强调,除了这个公共子集之外,兼容性较差。
  • chkconfig… BSD 上没有,因为用于此目的的传统工具是sysrc更新的 OpenBSDrcctl enablercctl disable. nosh 包中有chkconfig和垫片,可转换为和。rcctlsystem-control enable namesystem-control disable name
  • …只有 Fedora知道 systemd 并充当和 的chkconfig垫片。 SuSE不了解 systemd。systemctl enablesystemctl disablechkconfig

进一步阅读

答案3

Linux 上没有启动和停止服务的标准方法。

有什么东西可以把我从这注定的改变中拯救出来吗?

尝试配置管理/编排工具:安西布尔,厨师,盐堆,木偶管他呢。

您可以使用 Ansible 启动并启用服务:

ansible all -i inv -m service -a 'name=service-name state=started enabled=true'

看看Linux服务类在安西布尔的service模块:

这是 Linux 服务操作类 - 它目前支持二进制文件和初始化脚本的混合,用于控制启动时启动的服务以及控制当前状态。

答案4

您的问题是 Debian/Ubuntu 已切换到新版systemd本来替代旧版本sysvinit。问哪个更好,你们会开始一场激烈的战争,但你总是可以切换回旧的sysvinit,检查一下如果你想回去。

相关内容