我正在为我的应用服务器开发二进制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
命令有效吗?
答案 0 :(得分:1)
如果没有关于脚本性质的任何信息,很难说,但在invoke-rc.d
和service
下运行的主要区别在于
invoke-rc.d
)的情况下,/usr/sbin/policy-rc.d
尝试检查服务是否应该运行,而service
只执行您所说的内容;和service
清除大多数环境变量并将工作目录设置为/,以使执行环境尽可能可重现/可预测。 invoke-rc.d
没有。因此,您应该查看当前环境或工作目录或运行级别可能如何影响initscript。尝试直接运行它(/etc/init.d/myservice stop
),并尝试使用一些shell调试参数运行它(例如,bash的-x
选项:bash -x /etc/init.d/myservice stop
)。