在 Unix shell(ksh,bash)中编写并行启动脚本的最佳实践是什么?

在 Unix shell(ksh,bash)中编写并行启动脚本的最佳实践是什么?

我有一个软件,它包含不同的组件,运行在同一台 Unix 机器上(Web 服务器、DBMS、中间件、不同的守护进程)。几个组件的启动取决于前几个组件(如 DBMS)的启动成功。一些脚本可以并行运行。有没有一种优雅的方法可以控制这种脚本依赖性,并轻松使用并行化机制,使组件的启动尽可能快。

upstart 涵盖了与启动脚本类似的解决方案http://upstart.ubuntu.com/所以我正在寻找类似的东西,可以让我控制自己的子系统。

答案1

如果你有办法判断服务是否正常而不依赖于退出代码,你可以使用 wait 用 shell 脚本来 KISS 它,例如

#!/bin/bash

start_parallel_service_1 &
start_parallel_service_2 &
start_parallel_service_3 &

wait # this will wait until all startup scripts exited

check_parallel_service_1 || exit
check_parallel_service_2 || exit
check_parallel_service_3 || exit

echo all ok

答案2

Debian 实现基于依赖关系的启动在 Squeeze 上,你应该看看它。insserv 手册页也有一些关于使其工作所需的 LSB 标头的信息。

基本上,每个脚本都必须包含一个标头,告知insserv每个内容所依赖的内容。这会重新排序脚本,但不会完全使启动并行,您可以阅读更多有关如何做到这一点的信息以及有关启动启动过程的其他提示在此文档上

当然,所有文档都指的是 Debian,但我确信其他发行版可以使用类似的东西。

相关内容