我在/etc/init.d中有一个非常好的脚本。实际上,我有很多,都是用Tanuki Java Service Wrapper创建的。
在我看来,可能会有一个简单的模板来将这样的shell脚本包装为新贵的脚本,但是有些搜索并没有显示出来。
我想念什么吗?
我在/etc/init.d中有一个非常好的脚本。实际上,我有很多,都是用Tanuki Java Service Wrapper创建的。
在我看来,可能会有一个简单的模板来将这样的shell脚本包装为新贵的脚本,但是有些搜索并没有显示出来。
我想念什么吗?
Answers:
我不记得看到过这样的模板。然而,从技术上来说,这有点讽刺意味,它的新贵首先是由于向后兼容作业rc和rcS来启动init.d脚本。
我会考虑重写任何您拥有的新手工作,但是,我知道有些脚本很难转换,因此这是我一段时间对某些脚本所做的工作:
description "xyz"
author "xyz"
start on runlevel 5
stop on runlevel [!5]
pre-start script
# do my work here to start the service
end script
post-stop script
# do work here to stop the service
end script
现在,根据服务的性质,是持久化还是派生本身,您可能需要添加expect fork
或添加task
到作业文件中。
通常,只是为了完整考虑,这就是完整的新贵工作文件所需要的。所有的预启动工作都已经完成,所有的清理工作都已完成,剩下的唯一的事情就是服务本身,通常会添加以下内容:
exec service_cmd
因此,暴发户工作的一点是要易于编写。
init.d脚本中有很多shell脚本魔术,这些魔术会反复出现。案例陈述,pidfile跟踪,lsb注释行。还不清楚如何编写一个良好的init.d脚本而不阅读它。
如果您已经经历了编写所有这些文件的麻烦,那么您就不需要新贵的工作,除非,正如我在另一条评论中提到的那样,您需要依赖另一个新贵的工作/事件。
但实际上,暴发户确实使事情变得非常简单。除非需要设置诸如tmpdirs,ulimits或运行时参数之类的内容,否则不需要预启动。除非您要确保在完成服务后收拾整齐(您应该在正常退出后立即对服务进行清理),否则不需要停止服务。
通常,带有许多选项的巨型init.d脚本会归结为10至15行的新手工作。最复杂的init.d脚本可以将大多数逻辑转储到启动前的脚本中。关键在于,它只是一小段代码来设置流程环境,而不是处理启动/停止/重生/等逻辑。
最难的部分是人们何时开始/停止工作,这也是人们最经常出错的部分。start on runlevel [2345]
似乎是合乎逻辑的,但忽略了此时网络并行建立以及本地文件系统装入的事实。关键是尝试找出要运行所需的最低限度的东西(其他服务,文件系统,网络等),并在完成时开始。大多数传统的网络服务都应该这样做start on (local-filesystems and net-device-up IFACE!=lo)
。