apache2运行时通过服务失败,但不直接运行时

我有Apache启动时运行得很好,并手动使用/etc/init.d/apache2 start ,我可以这样做,但其中一个服务器pipe理器习惯于使用服务命令,由于某种原因,Apache不会通过服务正常运行。

如果我直接运行它,我会得到:

 Start ...[OK] Stop ...[OK] Help Usage: /etc/apache2/bin/httpd [-D name] [-d directory] [-f file] ... 

但是当我尝试通过服务命令运行它时,我得到:

 Start start: Job failed to start Stop stop: Unknown instance: Help Usage: /etc/apache2/bin/httpd [-D name] [-d directory] [-f file] ... 

我以前认为他们指向不同的可执行文件 ,但是根据帮助输出的用法,它们都指向/etc/apache2/bin/apachectl ,后者又指向/etc/apache2/bin/httpd 。 这也表明服务无法find正在运行的httpd进程(可能是因为它被称为httpd而不是apache2)。

为什么这两个调用同一个exe文件的方法(实际上是一个脚本,但这不重要)有不同的结果?

经过一些研究和搞乱文件,我发现了这个问题。

对我来说,Upstart与sysvinit的向后兼容性导致了两个文件之间的透明冲突。 Upstart支持/etc/init.d目录下的脚本,并支持sysvinit的向后兼容性,因为这是sysvinit用于脚本的旧目录。 但是,Upstart使用/etc/init/作为它的脚本。 预期的用法是在一个或另一个目录中有一个脚本。 我的问题归结为我有两个(我还不知道/etc/init/脚本如何到达那里)。 由于/etc/init中的脚本不是一个function脚本(它指向的是错误的apache exe文件),所以在启动时失败了,这是因为init.d中的脚本正在运行。 但是一旦我试图通过服务来运行,错误就变得可见了。

我删除了/etc/init/apache2.conf ,现在在init.d中的脚本中正确地服务apache2指针,就像我想要的那样。