可能发生哪种情况invoke-rc.d将失败但服务不会?

时间:2013-10-02 14:40:31

标签: ubuntu service debian deb

我正在为我的应用服务器开发二进制debian包。因此,我需要为它开发postinst和prerm脚本。我应该在prerm中安装新包之前停止服务。我发现我不能使用

service myservice stop
在prerm中我应该使用invoke-rc.d代替它,如下所示

invoke-rc.d myservice stop

这个地区总是因此而失败:

Invoke-rc.d: initscript myservice, action "stop" failed

当我想安装deb包时。我也通过开始测试它,并且我在启动时遇到了同样的错误。

奇怪的是,当我使用myservice时没有任何问题或失败,服务(sudo service myservice start/stop)正常工作。

任何人都可以解释为什么invoke-rc.d命令不起作用但service命令有效吗?

1 个答案:

答案 0 :(得分:1)

如果没有关于脚本性质的任何信息,很难说,但在invoke-rc.dservice下运行的主要区别在于

    在给定当前运行级别和任何系统initscript策略(invoke-rc.d)的情况下,
  1. /usr/sbin/policy-rc.d尝试检查服务是否应该运行,而service只执行您所说的内容;和
  2. service清除大多数环境变量并将工作目录设置为/,以使执行环境尽可能可重现/可预测。 invoke-rc.d没有。
  3. 因此,您应该查看当前环境或工作目录或运行级别可能如何影响initscript。尝试直接运行它(/etc/init.d/myservice stop),并尝试使用一些shell调试参数运行它(例如,bash的-x选项:bash -x /etc/init.d/myservice stop)。