systemctl init.d和service之间的区别

Modified on: Sat, 09 Jun 2018 04:20:23 +0800

我是linux新手,并且使用Amazon Lightsail实例(Ubuntu 16.04 LTS)测试自己。

通过我遇到的许多指南,我看到人们使用不同的命令来启动/停止/重启/重新加载/状态检查服务。特别是这些;

sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status

以上所有命令都有效。

  1. 我应该更喜欢一个命令吗?
  2. 如果是,那么为什么?
  3. 我还需要注意其他任何命令吗?
  4. 醇>

    当我想使用状态选项时,在Monit中使用init.d会导致问题(状态将是服务在实际在线时脱机 - 由Monit重新启动)。将Monit中的代码从inid.d更改为/ bin / systemctl修复它。

    似乎使用init.d提供了有关其他人发生的事情的更多信息。如果我应该使用其他命令之一,是否可以让它们显示有关已完成内容的更多信息?

    ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
    ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
    ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
    [ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
    ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
    ubuntu@ip-172-26-12-245:~$
    

    我想提前感谢所有花时间阅读并回复此问题的人。

最佳答案

首先,从SysVInitSystemD之间存在着完整的历史和斗争。虽然我没有试图在一个答案中打破这一切,但我会向您推荐一些谷歌冒险,了解有关历史的更多细节以及关于该主题的一篇特定文章:

http://www.tecmint.com/systemd-replaces-init -in-LINUX /

总而言之,这是一个缓慢而艰巨的过渡。一些遗留功能保持不变(例如init.d在某种程度上)。如果您可以选择使用systemctl进行服务控制,我建议您使用该服务。这是Linux的可预见的未来,最终旧的SysVInit方法将被视为完全弃用并被删除。

要涵盖您列出的每一项:

  1. sudo systemctl status apache2.service
  2. 醇>

    这是处理服务的新SystemD方法。展望未来,Linux上的应用程序旨在使用systemd方法,而不是任何其他方法。

    1. sudo /bin/systemctl status apache2.service
    2. 醇>

      这与上一个命令相同。在这种情况下,唯一的区别是它不依赖于shell的$PATH环境变量来查找命令,它通过包含命令的路径显式列出命令。

      1. sudo /etc/init.d/apache2 status
      2. 醇>

        这是调用服务的原始SysVInit方法。将为服务编写Init脚本并将其放入此目录中。虽然许多人仍在使用此方法,但service是替换此SysVInit中调用服务的方法的命令。在使用SystemD的较新系统上有一些遗留功能,但大多数较新的程序不包含此功能,并且并非所有旧的应用程序init脚本都可以使用它。

        1. sudo service apache2 status
        2. 醇>

          这是用于服务的SysVInit系统的主要工具。在某些情况下,它只链接到/etc/init.d/脚本,但在其他情况下,它转到存储在别处的init脚本。它旨在为服务依赖性处理提供更平滑的过渡。


          最后,你提到想知道如何从命令中获取更多信息,因为有些提供的信息比其他信息更多。这几乎总是由应用程序以及它们如何设计其init或服务文件来确定。但作为一般规则,如果它以静默方式完成则成功。但是,要验证startstoprestart,可以使用status子命令查看它是如何做的。您提到旧的init脚本上的status命令不正确。这是应用程序开发人员必须查看的错误。但是,由于init脚本正在成为处理服务的弃用方法,因此在完全删除init脚本选项之前,它们可能会忽略该错误。 systemctl status应该始终正常工作,否则应该与应用程序开发人员一起记录错误。

作者:TopHat

相关问答

添加新评论