【问题标题】:Which case can occured invoke-rc.d will be failed but service won't?哪种情况会发生,invoke-rc.d 会失败但服务不会?
【发布时间】:2023-03-17 22:50:01
【问题描述】:

我正在为我的应用服务器开发二进制 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 操作时遇到了同样的错误。

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

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

【问题讨论】:

    标签: ubuntu service debian deb


    【解决方案1】:

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

    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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2022-09-25
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2010-09-22
      相关资源
      最近更新 更多