我正在创建一个配置包,并希望停止和重新启动受到影响的服务。目前,我正在使用
从
维护者应该使用update-rc.d和invoke-rc.d程序提供的抽象层来处理其软件包脚本(如postinst、prerm和postrm)中的initscripts。
...
软件包维护者脚本必须使用invoke-rc.d来调用/etc/init.d/* initscripts,而不是直接调用它们。
Debian一直在使用sysv-init,并将直接转向systemd,我想政策手册会及时更新以引用systemctl。然而,我对此还不确定的是:我应该使用invoke-rc.d而不是service吗?我可以告诉dpkg我对某些文件感兴趣(通过触发器),那么是否有办法告诉dpkg我也对某些服务感兴趣,并让dpkg进行重启/重新加载操作呢?
澄清一下:我并不是在编写init脚本。我提供的是一个带有其他应用程序配置的软件包,比如Puppet、NTP等,所以我在脚本中停止和重新启动相应的服务。
例如,这里有一个关于
service [stop|restart]
在{pre,post}{inst,rm}
的方式。我在某个问题中读到,invoke-rc.d
是正确的方式,因为它尊重用户对服务的偏好。然而,我找不到任何关于这方面的指南。有人知道这样的指南吗?或者对我应该选择哪种方式有什么建议?该包是内部使用的,未来两年可能只适用于14.04版本。然而,我希望给我的继任者留下尽可能干净的状态,所以systemd
也在我的考虑范围内。从
invoke-rc.d
man page中可以看到:
从Debian政策手册第9章,第3.3节中可以看到:Debian软件包维护脚本应通过invoke-rc.d来访问所有init脚本。
维护者应该使用update-rc.d和invoke-rc.d程序提供的抽象层来处理其软件包脚本(如postinst、prerm和postrm)中的initscripts。
...
软件包维护者脚本必须使用invoke-rc.d来调用/etc/init.d/* initscripts,而不是直接调用它们。
Debian一直在使用sysv-init,并将直接转向systemd,我想政策手册会及时更新以引用systemctl。然而,我对此还不确定的是:我应该使用invoke-rc.d而不是service吗?我可以告诉dpkg我对某些文件感兴趣(通过触发器),那么是否有办法告诉dpkg我也对某些服务感兴趣,并让dpkg进行重启/重新加载操作呢?
澄清一下:我并不是在编写init脚本。我提供的是一个带有其他应用程序配置的软件包,比如Puppet、NTP等,所以我在脚本中停止和重新启动相应的服务。
例如,这里有一个关于
invoke-rc.d
与service
的Docker问题。该问题仍然未解决,有一个人,可能是维护者,评论说他们肯定有兴趣以正确的方式解决这个问题 - 显然我们都不确定什么才是正确的方式。(我的问题与该问题无关。)
invoke-rc.d
的手册和 Debian 政策文档告诉我们要与/etc/init.d/
脚本一起使用它(可能是因为它们仍在使用 sysv-init)。那么在 Upstart 或 systemd 中会有什么变化呢? - muruinvoke-rc.d ... || service ...
。 - Pantherif which service ... elif which invoke-rc.d ... else ...
- Panther