Ubuntu12.04:如何在启动时禁用守护进程


23

我通常使用service start/stopinitctl start/stop启动或停止守护进程,但是现在我要寻找的是从启动示例中禁用守护进程mysqld

当前正在做的是重命名/etc/init/mysql.conf/etc/init/mysql.conf.bak但是在阅读了一些有关的信息之后,systemd我知道它为enable & disable上述任务提供了选择。

所以,在ubuntu 12.04中是否有类似的东西upstart


您说您正在使用systemd?我在Fedora 17计算机上使用它。systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe,2012年

1
@BenjiWiebe:不,我没有使用systemd。我正在使用upstart,因为systemd不是ubuntu 12.04 / 12.10中的默认设置。
RanRag

1
哦,我现在知道了...不知道我在想什么。
BenjiWiebe,2012年

Answers:


26

您可以通过运行以下命令来禁用服务:

sudo update-rc.d -f <service name> disable

手册页摘录:

当使用disable [S | 2 | 3 | 4 | 5]选项运行时,update-rc.d通过重命名开始链接以停止序列号等于等于的链接来修改脚本/etc/init.d/name的现有运行级别链接。相差100减去原始序列号。


2
我没有足够的声望来否决它,而没有解释就这样做是不礼貌的,因此请发表评论:@Noob的问题与使用Upstart(/etc/init/*.conf配置的Ubuntu 12.04有关)文件)用于大多数系统守护程序(如@Noob所述),而您的建议仅适用于使用/etc/init.d / *(旧的SysV样式)中的脚本开始的守护程序。编辑:记录下来,warl0ck有正确的答案(谢谢!)。
xolox

3
问题是关于使用mysql作为特定主题的假设或一般情况。OP似乎至少部分地意识到了这个答案,但是它可能会很好地引起人们的注意,因为有些有用的软件包不能也不会采用新贵的格式(例如webmin和许多在评论之时从源软件包自行构建的软件包) 。这意味着该方法可以作为上下文的有效部分答案,就像warl0ck和Mark的答案可以解决安装了程序包管理器的假设mysql服务的特定点一样。
JustinC

不需要-f标志。
dannyman 2014年

20

禁用和启动服务的正确方法是创建XX.override文件,

echo 'manual' > /etc/init/mysqld.override

这样,新贵服务将不会自动启动


这仍然适用Ubuntu 12.04吗?
RSK 2014年

@RSK是的,为什么不尝试一下?
雏菊

1
我尝试过但没有为我工作。Lemme再试一次,将更新您的信息。
RSK 2014年

不,它在Ubuntu-14.04上不起作用。
Hi-Angel'3

1
@RSK yes, why don't you just give it a try?我想是因为对这个页面上的每个建议都“尝试”重新启动系统非常不方便。
user907860'1

7

@ warl0ck正确;希望补充一下,该信息在Upstart文档中有很好的记录:http : //upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

特别:

使用Upstart 1.3,您可以使用替代文件和手动节以更简单的方式实现相同的结果[27]:

# echo "manual" >> /etc/init/myjob.override

请注意,通过执行以下操作可以达到相同的效果:

# echo "manual" >> /etc/init/myjob.conf

但是,使用替代功能意味着您可以保持原始作业配置文件不变。

要还原为原始行为,请删除或重命名覆盖文件(或从“ .conf”文件中删除手动节)。


5

还有一个不错的软件可以协助完成此任务。它称为rcconf。

只需使用以下命令下载它:

sudo apt-get install rcconf

并与命令一起使用

rcconf

您会获得一个不错的(命令行)界面来禁用/启用服务。


这不包括在系统中,因此安装更多的东西不是更好的答案。
m3nda 2015年

但真的有用:D
Magico

1

尝试导航至/etc/rc2.d并重命名您希望在启动时运行的内容:将(首字母大写)“ S”更改为“ K”(例如S02mysqlK02mysql)。如果您改变主意,只需扭转一下。我认为2是指运行级别,在这种情况下2是默认的多用户运行级别。也许那是您拥有大部分日常计算机使用内容的地方。

编辑:阅读下面的詹姆斯·奥戈曼的评论。


1
是的'2'是指运行级别。您可以使用who -r或查看当前的运行级别runlevel
RanRag

这是真的,who --runlevel
伊曼纽尔·伯格

1
虽然这实现了您想要的,但从技术上讲,这是错误的选择。用SysV init术语来说,“ S”脚本是启动脚本,“ K”是终止脚本-即S在启动时按顺序运行,而K在关机时按顺序运行(或更改为较低的运行级别)。
詹姆斯·奥戈曼

@ JamesO'Gorman:有趣的是,我正在使用Debian,您是说我的“ K脚本”在关机时运行吗?是否有一些可以完全禁用脚本的字母,没有任何危险?(将它们保存在同一文件夹中是一种实际的做法
Emanuel Berg

@EmanuelBerg是的,init将在关机时运行“ KXXscript stop”。您应该删除符号链接或从实际的初始化脚本中删除执行位。我相信Debian会使用它update-rc.d来管理。RHEL(及其衍生产品)的使用chkconfig
James O'Gorman

0

使用Upstart,服务配置位于中的文件中/etc/init/。例如,使用配置文件控制ssh/etc/init/ssh.conf

该文件指定“事件”,将提示Upstart启动“作业”。

为了防止服务自动启动,可以使用以下几种方法之一:
a)重命名service.conf文件,使其不以.conf结尾
b)注释掉service.conf文件中的“ start on”行。

在较新版本的upstart(至少从v1.3开始)中,您还可以使用service.override文件覆盖在线开始,因此您可以使用:
# echo manual > /etc/init/service.override

最后,您还可以在服务的配置文件末尾添加关键字“ manual”,例如通过:
# echo manual >> /etc/init/service.conf

请注意,这不会“停止”正在运行的服务,只是阻止了它自动启动。设置为“手动”启动时,您可以使用initctl控制服务,例如停止和启动SSH守护程序:
# initctl stop ssh
# initctl start ssh

可以说,关于Upstart的最佳文档是在http://upstart.ubuntu.com/cookbook/

第11.44节介绍了“禁用自动启动服务,此处:http : //upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting


0

好吧,我必须说

echo "manual" >> /etc/init/myjob.override

有点误导,因为它意味着附加替代文件。我在14.04上使用网络管理器对此进行了测试,以下内容没有起作用

vim /etc/init/network-manager.override:
start
manual

但是这有效

vim /etc/init/network-manager.override:
#start
manual

因此,IMO,initctl查找第一个未注释的行并执行它。也许我错了,但这是我的测试结果。欢迎输入。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.