从upstart中删除服务

我在开发机(笔记本电脑)上安装了mysql(源自仓库),我不需要在每次启动时都运行该守护程序。我将/etc/init/mysql.conf复制到/etc/init/mysql.conf.old,然后删除了"start on"行后的所有内容。然而,在重新启动后,我无法通过upstart启动mysqld。
$ sudo service mysql start
start: Unknown job: mysql
这个也失败了(在这一点上尝试任何东西都不行):
$ sudo service mysql restart
stop: Unknown job: mysql
start: Unknown job: mysql
这是我的启动脚本:
# /etc/init/mysql.conf
....
start on
stop on starting rc RUNLEVEL=[016]
这是默认脚本:
# /etc/init/mysql.conf.old
....
start on runlevel [2345]
stop on starting rc RUNLEVEL=[016]
我读到的所有资料都表明这是防止服务在启动时启动的方法。有没有更好的方法来做这个,或者我在upstart脚本中犯了一个错误? 更新:我将备份配置文件从/etc/init移出并重新启动,以为可能存在冲突,但upstart仍然显示“未知作业:mysql”。

检查 /var/log/syslog,它可能会告诉你在 /etc/init/mysql.conf 中存在语法问题。你也可以尝试运行 'init-checkconf /etc/init/mysql.conf'。 - SpamapS
2个回答

如果您使用的是Ubuntu 11.04或更高版本,您可以在/etc/init目录下使用"manual"关键字和.override文件来禁用自动启动功能。
sudo sh -c 'echo manual >> /etc/init/mysql.override'

manual 有效地从作业配置中移除了 start on 段落。

如果你使用的是 Ubuntu 10.04,你可以这样做:

sudo sh -c 'echo start on never >> /etc/init/mysql.conf'
文件中的最后一个start on将覆盖之前的任何一个,所以这应该可以工作,尽管它假设没有名为never的事件。

从这篇帖子中: “开始于”部分的语法需要完整且正确。
start on runlevel [!0123456]

这行代码表示当运行级别不在 [0,1,2,3,4,5,6] 之中时执行(这些是唯一的运行级别,因此永远不会执行)。

另一个选项是根据 this 帖子使用 chkconfig