目前我的所有部署脚本都在shell中,它安装了大约10个程序并对其进行配置。我认为shell的方式是一个很棒的工具:
模块化:每个脚本只有一个程序,这样我就可以在不同的服务器上传播程序。
简单: Shell脚本非常简单,不需要安装任何其他软件。
一键点击:我只需要运行一次shell脚本,一切都已设置好。
不可知:大多数程序员都可以找出shell而不需要知道如何使用特定的程序。
版本控制:由于我的代码在GitHub上,因此简单的Git拉动并重新启动所有主管将运行我的最新代码。
答案 0 :(得分:37)
如果你让它们像你需要的那样工作,那么shell脚本并不是那么糟糕。
人们推荐其他工具(例如CFEngine
,Puppet,Chef,Ansible等等)由于各种原因,其中一些是:
make
等工具而不是实施构建的原因相同
带脚本的系统。Idempotency :服用的质量确保它可以安全 重新运行任意次数,并且在每次运行时它将达到所需的数量 状态,或者保持在那里,或者至少以一种收敛的方式靠近它。
当然,您可以编写脚本,以便最终结果是幂等的:
# Crude example
grep myhost /etc/hosts || echo '1.2.3.4 myhost' >> /etc/hosts
但是使用幂等工具会更好。
Shell脚本是命令式。 Chef / Ansible / Puppet等工具是声明性的。 一般而言,声明可以在给定一定的规模门槛的情况下提高生产率。
DSL带走了一些力量,但随后他们给你订购,清洁和其他 各种力量。我喜欢shell脚本,但我也爱Ruby,还有Puppet人 爱他们的语言!如果你仍然认为shell是你想要的方式,因为你喜欢 它更多,嘿,你没有问题。
[已添加] 可重新分发,可重复使用的软件包。 Ruby有宝石,Perl有CPAN,Node有npm, Java有maven - 所有语言都有自己的可重用性约定 源代码必须打包并与世界共享。
Shell Scripts没有。
Chef的烹饪书遵循惯例,可以大致相同的方式导入 你将gem导入你的ruby应用程序,为你的应用程序提供一些新的能力。 Puppet有puppetforge和它的模块,Juju有魅力(它们非常接近 shell脚本,所以你可能会感兴趣。)
这些工具实际上帮助了他们!我是一个顽固的shell脚本编写者,现在还是, 但是使用厨师让我早点回家,睡个好觉,保持控制, 可以通过操作系统移植,避免混淆 - 我经历过的实实在在的好处 放弃大规模的服务器shell脚本。