我使用过像 puppet 这样的工具来管理单个系统,通常取得了很高的成功。puppet 失败的地方在于它不擅长管理单个服务器之外的依赖项。
例如,在 MySQL 服务器上,我将 puppet 配置为执行以下操作:
在这组步骤中,解决了许多依赖项 - 例如,除非我安装了软件包,否则我无法启动数据库服务,除非正确配置了 apt 存储库,否则我无法启动。
这个 MySQL 服务器是 master->master 复制设置中的一个盒子。在理想的世界中,puppet(或其他类似工具)会让我表示服务器 B 需要等到服务器 A 可用,然后尝试与其建立复制关系的事实。
这里有很多文字 - 基本上我要问的是:有没有像 puppet 这样的工具可以像这样管理机器间的依赖关系?
(提前为这个问题的愚蠢道歉。我通常是一名程序员,而不是系统管理员,但我已经承担起自动化一些事情,并清理其他一些自动化但不是最漂亮的方式的东西.:-)
我一直在寻找用于将软件部署自动化到一堆服务器的各种工具,例如 cfengine、Puppet 和 Chef。到目前为止,Puppet 看起来最吸引人,但我当然还没有承诺过任何事情。
这些工具看起来都可以很好地使用预先打包的软件使一堆服务器保持最新状态。
我不明白的是:如何使用工具(如 Puppet)来管理我们自己内部软件的部署?我想我不知所措我,因为我已经看到了一千教程展示了如何保持阿帕奇ensure => latest(这是很酷的),但是没有一个相当相当于我用例的今天,这是更多的东西一样:
Puppet 听起来很棒,我完全看到了声明式、幂等配置相对于某些 shell 脚本的优势,但我还没有看到任何关于“您想将 shell 脚本更新为 Puppet(或 Chef 或 cfengine)的教程,所以这就是您应该做”。有这样的事情吗?对于其他人来说,如何使用 Puppet 文档中提供的内容并复制我想要的行为是否显而易见?我只是没有得到它吗?
到目前为止,在我看来,人类(#1)会手动打包 Puppet 外部的软件(#2 和 #3),手动更新 Puppet 配置,这将触发 Puppet 更新服务器。 .. 也许?(我在这里有点困惑,因为我相信你能看出来。)
谢谢!
freebsd-update命令在下载后打印更新条目。但它用more. 所以我必须按一些空格才能继续。有没有办法避免这种行为?我想以全自动方式执行更新。
下周我将帮助教授两门 Unix 课程。用户将在 RHEL 5 机器上获得一个帐户,在此期间,他们会将文件添加到他们的/home文件夹中,更新他们的.bashrc和其他点文件,并执行其他需要清理的一般混乱。
第二节课的学生将重复使用第一节课的人的用户帐户。我想自动清理他们的帐户,以便新用户可以重新开始。
我确信我可以编写一个 shell 脚本来运行 asu -u $USER_ID并在他们的 homedir 中放置一组“原始”的好文件,并删除它找到的任何其他内容。是否有其他工具可以帮助我完成此清理/重置操作?我对 Puppet、Chef 或其他工具没有任何经验。他们会帮助做这样的事情吗?
为了提供问题的范围,大约有 30 个用户帐户,我知道所有用户 ID/密码,并且它们都是在同一个 RHEL 机器上创建的。
我正在寻找一种解决方案来自动化我们应用程序的部署过程之一。在部署开始时,我想以编程方式将指定的服务器设置为维护模式,最后在部署完成后,从 nginx 服务器中删除维护模式标志。
通过维护模式,我的意思是 nginx 应该以 HTTP 响应代码 503 响应所有请求(可能带有自定义页面)。
我知道如何设置服务器块以响应 503 代码(请参阅http://www.cyberciti.biz/faq/custom-nginx-maintenance-page-with-http503/)但问题是如何以编程方式执行此操作并且最有效。
我想到了两个选择:
选项1:在部署过程开始时,将维护文件写入文档根目录,并有条件地检查nginx服务器配置中是否存在维护文件:
server {
if (-f $document_root/in_maintenance_mode) {
return 503;
}
}
Run Code Online (Sandbox Code Playgroud)
此方法包含一定的开销,因为每个请求都会检查文件是否存在。是否可以仅在加载 nginx 配置时检查文件是否存在?
选项 2:部署脚本用维护版本替换整个 nginx 服务器配置文件,并在部署结束时将其换回。如果使用此方法,我担心可能会覆盖维护配置文件的其他自动化进程,例如 puppet。
我一直在使用bash我的大部分系统管理任务。我也懂一点perl。
我应该学习 Python还是Perl更适合系统自动化。到目前为止,从我的经验来看,学习 perl 很容易。
我有一个 Perl 应用程序,它需要很多依赖项,我需要在众多服务器上部署这些依赖项
我想制作一个自动快速安装该 Perl 应用程序的脚本。
为了更快,我想使用我的包管理器安装我的大部分依赖项,而不是使用 CPAN 安装它们
有没有办法从 perl 模块列表中自动确定是否有 debian 包?如果有,安装包,如果没有从 CPAN 安装 Perl 模块?
我有一个带有以下磁盘的 AWS Windows 机器(Windows 2008 R2):
C:\ 60 Gb (EBS)
D:\ 200 Gb (EBS)
Y:\ 40 Gb (Ephemeral SSD)
Z:\ 40 Gb (Ephemeral SSD)
Run Code Online (Sandbox Code Playgroud)
每次启动时,我将临时驱动器更改为D:和E:并将 EBS 驱动器更改为Z:。有时在重新启动后临时驱动器未安装。我真的需要这样,因为我有一个程序,它的数据在D:驱动器中并且无法更改。我想受益于临时 SSD 的额外速度。
在 AWS 中实现自动化的最佳方法是什么?
我想制作一个使用 WMI 在启动时更改驱动器号的 PowerShell 脚本(在此之后),但我不确定这是否是最佳选择。AWS 是否有某种方法来控制/配置临时驱动器?
问题:
我没有对服务器的 root 访问权限(即,我不能/不想更改任何系统范围的服务器配置),并且我想将 scp 与替代身份文件(例如,.ssh/id_rsa_for_scp)一起使用来自动执行从服务器下载一些文件,但我不希望使用相同的密钥通过 ssh 访问服务器。
考虑一个期望脚本,它生成一个命令并等待一系列事件。我们用它来测试软件。当超时时,我总是试图从脚本中获取失败返回值。
spawn some-command
set timeout 10
expect "First message"
expect "Other message"
Run Code Online (Sandbox Code Playgroud)
即使超时,此脚本也始终返回 0(成功)。处理超时的唯一方法是将每个 Expect 语句转换为:
expect {
timeout { exit 1 }
eof { exit 1 }
"First message"
}
Run Code Online (Sandbox Code Playgroud)
但这很快就会变得笨拙。有任何简化吗?是否有一个期望选项会导致早期超时/ eof 致命错误?
automation ×10
deployment ×2
linux ×2
perl ×2
puppet ×2
dependencies ×1
expect ×1
freebsd ×1
installation ×1
maintenance ×1
nginx ×1
python ×1
scripting ×1
ssh ×1
windows ×1