我正在编写一个bash脚本来设置生产服务器。手头的任务包括编译软件,创建用户和目录,复制文件等等。

我想知道我还应该做些什么。也许记录到文件?检查0退出状态?我可以添加什么来实际使这个脚本变得更好而不仅仅是“它的工作原理”。 ?

有帮助吗?

解决方案

也许您应该重新考虑如何将软件部署到生产服务器:

  1. 编译软件应该在开发环境中完成,而不是在生产服务器上完成。无需在生产服务器上安装编译器。并且有很多理由不这样做(主要是安全原因)。

  2. 使用包管理系统部署您的软件。如果您使用的是linux,请使用deb,rpm或您的发行版使用的任何包管理器。这将使您可以完全控制安装的版本,并提供依赖项功能。

  3. 安装软件的软件包应随附软件所需的所有文件(除非这些文件可以由其他软件包提供),还可以设置用户,目录,权限以及软件需要的任何其他内容。

  4. 基本上,您可以在软件包的post install和post remove部分编写bash脚本。

  5. 确保测试一旦安装,该软件包将带来并创建运行程序所需的一切,并卸载软件包,删除所有文件,并撤消安装后脚本所执行的操作。

  6. 确保将软件包从版本X升级到X + 1按预期工作。

  7. 关于脚本本身。您当然应该检查您运行的命令的退出状态。您可以使用 Wrapper脚本,这样您就不必重复退出代码检查,并记录每个命令。

    祝你好运!

其他提示

在我的工作中,我们有shell脚本,可以在构建服务器时自动化几乎所有内容。操作系统的安装基于一些配置文件和诸如此类的东西完全自动化。修补,添加用户等都是为了让生活更轻松而编写的。

然而,当我们需要部署企业应用程序时,这些服务器是“应用程序服务器”。请注意,这是一个完全不同的过程。我们处理一组完全不同的管理员,中间件人员。我们为他们提供了从dev,qa,然后再到prod的推广的二进制文件。

自动设置盒子是完全正常的,但你不想成为“建筑物”。生产箱上的应用程序。如果对于任何原因,任何实时应用程序的性能都会看到该框何时进行一个非常糟糕的编译过程。 :d

@汤姆: 稳定且成功的Linux发行版的一个例子是Gentoo,其中所有二进制文件在安装之前在服务器上编译(在发行版中不存在二进制文件)。它已被大型生产服务器使用,例如isohunt.com。

在服务器上构建二进制文件是一个好主意,因为它确保您的二进制文件在主机平台的某个级别进行优化,前提是安装程序为编译器提供了正确的标志。

在服务器上安装GCC会伤害任何一个IMO:)

@Lars:

你应该 -

保留一个日志记录文件,并添加纠正错误和继续前进所需的步骤。

在开发过程开始时,通过消息处理异常到stdout,并在测试脚本时提供处理程序。

总的来说,尝试为您的用户轻松完成工作,他们真的可能不知道您的脚本执行的微管理(复制文件,安装守护程序,创建文件系统,设置perminssions,等等)并且只有您的安装程序才能完成这个过程成功了。

在多个系统上测试脚本将确保它可以正常工作

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top