停止在 Linux 中启动时运行的程序

Fro*_*kys 32 linux startup shutdown boot

如何停止在 Linux 中启动时运行的程序。我想从启动中删除一些应用程序以允许它们由supervisord例如 apache2管理

jac*_*onh 31

根据您的发行版,使用 chkconfig 或 update-rc.d 工具来启用/禁用系统服务。

在 redhat/suse/mandrake 风格的系统上:

sudo chkconfig apache2 off 
Run Code Online (Sandbox Code Playgroud)

在 Debian 上:

sudo update-rc.d -f apache2 remove
Run Code Online (Sandbox Code Playgroud)

查看他们的手册页以获取更多信息。

  • 这里有两组文件正在播放。您在 /etc/init.d/ 中有实际的 init 脚本,并且在您的运行级别目录 /etc/rcrunlevel.d/ 中有指向它的链接。这些家伙指向 /etc/init.d/ 中的脚本如果你不使用 -f update-rd.d 将会失败,除非 /etc/init.d/ 中的脚本已经被删除。如果您确实使用 -f update-rc.d 将正确删除链接文件,无论 /etc/init.d/ 脚本是否被删除。 (2认同)

小智 7

列出所有启动服务

    systemctl
Run Code Online (Sandbox Code Playgroud)

停止服务在启动时运行

    sudo systemctl disable servicename
Run Code Online (Sandbox Code Playgroud)

例如,如果我们需要在启动时停止运行 ssh 服务器

    sudo systemctl disable sshd.service
Run Code Online (Sandbox Code Playgroud)

我们可以使用以下命令再次启用此功能

    sudo systemctl enable sshd.service
Run Code Online (Sandbox Code Playgroud)

几乎每个 Linux 发行版都使用 systemd 来引导启动服务。所以上面的命令适用于大多数发行版。


Ste*_*n D 6

如果您正在处理现代 Ubuntu 系统和其他一些发行版,您可能需要处理传统 init 脚本和 upstart 脚本的组合。其他答案涵盖了管理 init 脚本。以下是阻止 upstart 服务在启动时启动的一种方法:

# mv /etc/init/servicename.conf /etc/init/servicename.conf.disabled
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于它不允许您使用以下方式启动服务:

# service start servicename
Run Code Online (Sandbox Code Playgroud)

另一种方法是servicename.conf在您喜欢的编辑器中打开文件并注释掉以以下开头的任何行:

start on
Run Code Online (Sandbox Code Playgroud)

也就是说,将其更改为

#start on ...
Run Code Online (Sandbox Code Playgroud)

其中“...”是之前“开始”之后的任何内容。这样,当您想重新启用它时,您不必记住“开始于”参数是什么。

最后,如果您有新版本的 upstart,您可以简单地在配置文件的末尾添加“手册”一词。您可以直接从 shell 执行此操作:

# echo "manual" >> /etc/init/servicename.conf
Run Code Online (Sandbox Code Playgroud)

这将导致 upstart 忽略文件中较早的任何“开始”短语。