1

我正在为我的应用程序服务器开发二进制 debian 包。因此,我需要为其开发 postinst 和 prerm 脚本。在 prerm 中安装新软件包之前,我应该停止服务。我发现我无法使用

service myservice stop

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

invoke-rc.d myservice stop

这个command总是因此失败:

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

当我想安装 deb 包时。我也通过 start 对其进行了测试,并且我在 start 操作时遇到了同样的错误。

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

谁能解释为什么invoke-rc.d命令不起作用但service命令起作用?

4

1 回答 1

1

很难说没有关于脚本性质的任何信息,但是在运行invoke-rc.d和运行之间的主要区别service

  1. invoke-rc.d在给定当前运行级别和任何系统初始化脚本/usr/sbin/policy-rc.d策略service(和
  2. service清除大多数环境变量并将工作目录设置为 /,以使执行环境尽可能地可重现/可预测。invoke-rc.d才不是。

因此,您可能应该查看当前环境或工作目录或运行级别可能如何影响 initscript。尝试直接运行它(/etc/init.d/myservice stop),并尝试使用一些 shell 调试参数运行它(例如,bash 的-x选项bash -x /etc/init.d/myservice stop

于 2013-10-02T22:03:04.683 回答