linux自动化脚本
Linux系统下学习shell脚本语言比较好,对于一些常见的系统脚本使用Shell开发会更简单、更快速,例如:让软件一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等,虽然PHP/python语言也能够做到这些,但是,考虑到掌握难度、开发效率、开发习惯等因素,它们可能就不如Shell脚本语言流行及有优势了。对于一些常规的业务应用,使用Shell更符合Linux运维简单、易用、高效的三大基本原则。
‘贰’ Linux下开机启动脚本程序
本周我们学习了如何使用Linux编辑脚本程序,当我们编写好脚本的时候,我们需要返回终端界面,使用各种编译器运行程序,但是有时候我们需要在系统开机的时候就自动运行这些程序,下面我们就来看一下在Linux下将脚本设定成开机自动运行的方法。
Linux在启动时,会自动执行/etc/rc.d目录下的初始化程序,因此我们可以把启动任务放到该目录下。假设我们需要运行的脚本文件是test1目录下的test.py。
在系统中找到/etc/rc.local文件,系统会根据该文件来启动所指定的脚本或命令。
我们需要用超级用户登录,并在上述文件最后添加需要运行的脚本文件。
随后cd /home/test1返回test1目录以对其进行更改。
su test1 -c "python /home/test1/test.py" --把要执行的命令作为一个参数传递级su
下面我们就可以实现这个脚本的开机自动运行。
‘叁’ 关于linux启动后自动执行脚本求教
编辑/etc/rc.d/rc.local文件,把脚本加入 开启服务的方法根据发行版不同,有区别,比如RHEL、CentOS 4/5/6: chkconfig servciename on
‘肆’ linux脚本运行
刚学习这个,写的不好见谅
#!/bin/bash
while :
do
read -p "请输入你喜欢的操作系统(Windows、Mac、Linux)" a
case $a in
windows|Windows|WINDOWS)
echo "巨硬,糟糕的选择!"
continue;;
Mac|mac|MAC)
echo "苹果是真滴有钱!"
continue;;
Linux|linux|LINUX)
echo "真是伟大的选择!"
exit;;
*)
continue;;
esac
done
‘伍’ Linux 下Python 脚本编写的"奇技淫巧"
“ 生命完美的答案,无非走过没有遗憾 ---《天蓝》”
“如何能够解析脚本运行命令行选项(位于 sys.argv 中)”
argparse 模块可被用来解析命令行选项
常用来定义一个脚本的说明文档,一般我们写python脚本会通过 if..else 的方式来提供一个脚本说明文档,python不支持switch。所以很麻烦,其实,我们可以通过 argparse 来编写说明文档。
我们来看看怎么执行一个python脚本
对于熟悉Linux的小伙伴下面的文档在熟悉不过了,这个一个标准Linxu软件包的说明文档,文档中定义是软件包的说明
来看看这个脚本是如何编写的
为了解析命令行选项, 首先要创建一个 ArgumentParser 实例, 使用 add_argument() 方法声明你想要支持的选项。在每个 add-argument() 调用中:
dest 参数指定解析结果被指派给属性的名字。 metavar 参数被用来生成帮助信息。
action 参数 指定跟属性对应的处理逻辑,通常的 值为 store , 被用来存储 某个值 或将 多个参数值收集到一个列表中 。
nargs 参数收集 所有剩余的命令行参数到一个列表中。在本例中它被用来构造一个文件名列表
action='store_true' 根据参数是否存在来设置一个位置 Boolean 标志:
action='store' 参数接受一个单独值并将其存储为一个字符串
如果一个都没有,会提示缺少参数 -p/--pat
choices={'slow', 'fast'}, 参数说明接受一个值,但是会将其和可能的选择值做比较,以检测其合法性:
一旦参数选项被指定,你就可以执行 parser.parse() 方法了。它会处理 sys.argv 的值并返回一个结果实例。每个参数值会被设置成该实例中 add_argument() 方法的 dest 参数指定的属性值。
还很多种其他方法解析命令行选项。可以会手动地处理 sys.argv 或者使用 getopt 模块 。但是,如果你采用本节的方式,将会减少很多冗余代码,底层细节 argparse 模块 已经帮你处理好了。你可能还会碰到使用 optparse 库解析选项的代码。尽管 optparse 和 argparse 很像 ,但是后者更先进,因此在新的程序中你应该使用它。
“你写了个脚本,运行时需要一个密码。此脚本是交互式的,因此不能将密码在脚本中硬编码,而是需要弹出一个密码输入提示,让用户自己输入。”
Python 的 getpass 模块 正是你所需要的。你可以让你很轻松地弹出密码输入提示,并且不会在用户终端显示密码。
代码中 getpass.getuser() 不会弹出用户名的输入提示。它会根据该 用户的 shell 环境 或者会依据 本地系统的密码库 (支持 pwd 模块的平台)来使用 当前用户的登录名
在bash中编写pytohn脚本接收外部数据的方式,一般情况下,对于一般变量,我们用命令行变量的方式比较多(手动的处理 sys.argv ),对于 文件内容或者bash命令输出 直接通过脚本内部获取需要的数据。
其实python 脚本也可以用其他方式来接收 传递给他的 文件数据或者bash命令输出 ,包括将 命令行的输出 通过 管道传递 给该脚本、 重定向文件到该脚本 ,或在 命令行中传递一个文件名 或 文件名列表 给该脚本。
这里通过 Python 内置的 fileinput 模块 ,可以实现重 定向,管道,以文佳输出 的方式传递数据到脚本内部
使用 fileinput.input() 方法可以获取当前输入脚本的数据,脚本里面用一个 FileInput 迭代器接收
文件直接接收
重定向接收
管道方式接收
fileinput.input() 创建并返回一个 FileInput 类的实例,该实例可以被当做一个 上下文管理器 使用。因此,整合起来,如果我们要写一个打印多个文件输出的脚本,那么我们需要在输出中包含文件名和行号
“你想执行一个外部命令并以 Python 字符串的形式获取执行结果。”
使用 subprocess.check_output() 函数。
执行下试试
如果被执行的命令以非零码返回,就会抛出异常。下面的例子捕获到错误并获取返回码:
默认情况下, check_output() 仅仅返回输入到标准输出的值。如果你需要 同时收集标准输出和错误输出 ,使用 stderr 参数:
如果你需要用一个超时机制来执行命令,使用 timeout 参数:
通常来讲,命令的执行 不需要 使用到 底层 shell 环境(比如 sh、bash) 。一个字符串行表会被传递给一个 低级系统命令 ,比如 os.execve() 。
如果你想让 命令被一个shell 执行 ,传递一个字符串参数,并设置参数 shell=True . 有时候你想要 Python 去执行一个复杂的 shell 命令 的时候这个就很有用了,比如管道流、I/O 重定向和其他特性。例如:
是在 shell 中执行命令会存在一定的安全风险,特别是当参数来自于用户输入时。这时候可以使用 shlex.quote() 函数 来将参数正确的用双引用引起来。
使用 check_output() 函数 是执行 外部命令 并获取其 返回值 的最简单方式。但是,如果你需要对 子进程做更复杂的交互 ,比如给它发送输入,你得采用另外一种方法。这时候可直接使用 subprocess.Popen 类。
关于子进程,简单来看下
也可以进程列表同协程结合的方式。你既可以在子shell中 进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。
如果直接丢到后台会自动在终端输出IO
subprocess 模块对于依赖 TTY 的外部命令不合适用 。例如,你不能使用它来自动化一个用户输入密码的任务(比如一个 ssh 会话)。这时候,你需要使用到第三方模块了,比如基于着名的 expect 家族的工具(pexpect 或类似的)(pexpect可以理解为Linux下的expect的Python封装、通过pexpect可以实现对ssh、ftp、passwd、telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的。比如我们可以模拟一个FTP登录时所有交互,包括输入主机地址、用户名、密码、上传文件等,待出现异常还可以进行尝试自动处理。)
“你想向标准错误打印一条消息并返回某个非零状态码来终止程序运行”
通过 python 的 raise SystemExit(3) 命令可以主动抛出一个错误,通过 sys.stderr.write 将命令写到标准的输出端
直接将消息作为参数传给 SystemExit() ,那么你可以省略其他步骤
抛出一个 SystemExit 异常,使用错误消息作为参数,它会将消息在 sys.stderr 中打印,然后程序以状态码 1 退出
“你需要知道当前终端的大小以便正确的格式化输出。”
使用 os.get terminal size() 函数 来做到这一点。
“复制或移动文件和目录,但是又不想调用 shell 命令。”
shutil 模块 有很多便捷的函数可以复制文件和目录。使用起来非常简单
这里不多讲,熟悉Linux的小伙伴应该不陌生。
默认情况下,对于 符号链接 这些命令处理的是它指向的东西文件。例如,如果 源文件 是一个 符号链接 ,那么目标文件将会是 符号链接 指向的文件。如果你只想 复制符号链接本身 ,那么需要指定 关键字 参数 follow_symlinks
tree() 可以让你在复制过程中选择性的忽略某些文件或目录。你可以提供一个忽略函数,接受一个目录名和文件名列表作为输入,返回一个忽略的名称列表。例如:
对于文件元数据信息, 2() 这样的函数只能尽自己最大能力来保留它。 访问时间、创建时间和权限 这些基本信息会被保留,但是 对于所有者、ACLs、资源 fork 和其他更深层次的文件元信息就说不准了
通常不会去使用 shutil.tree() 函数 来执行 系统备份 。当处理文件名的时候,最好使用 os.path 中的函数来确保最大的可移植性
使用 tree() 复制文件夹的一个棘手的问题是对于错误的处理,可以使用异常块处理,或者通过 参数 ignore dangling symlinks=True 忽略掉无效符号链接。
“创建或解压常见格式的归档文件(比如.tar, .tgz 或.zip)”
shutil 模块拥有两个函数—— make archive() 和 unpack archive() 可派上用场,
make archive() 的第二个参数是期望的输出格式。可以使用 get archive formats() 获取所有支持的归档格式列表。
“你需要写一个涉及到文件查找操作的脚本,比如对日志归档文件的重命名工具,你不想在 Python 脚本中调用 shell,或者你要实现一些 shell 不能做的功能。”
查找文件,可使用 os.walk() 函数 ,传一个顶级目录名给它
os.walk() 方法 为我们 遍历目录树 ,每次进入一个目录,它会返回一个 三元组 ,包含 相对于查找目录的相对路径,一个该目录下的目录名列表,以及那个目录下面的文件名列表。
对于每个元组,只需检测一下目标文件名是否在文件列表中。如果是就使用 os.path.join() 合并路径。为了避免奇怪的路径名比如 ././foo//bar ,使用了另外两个函数来修正结果
os.walk(start) 还有跨平台的优势。并且,还能很轻松的加入其他的功能。我们再演示一个例子,下面的函数打印所有最近被修改过的文件:
打印10分钟之前被修改的数据
“怎样读取普通.ini 格式的配置文件?”
configparser 模块 能被用来读取配置文件
编写配置文件
如果有需要,你还能修改配置并使用 cfg.write() 方法将其写回到文件中
“你希望在脚本和程序中将诊断信息写入日志文件。”
python 脚本打印日志最简单方式是使用 logging 模块
五个日志调用( critical(), error(), warning(), info(), debug() )以降序方式表示不同的严重级别。 basicConfig() 的 level 参数是一个 过滤器 。所有级别低于此级别的日志消息都会被忽略掉。每个 logging 操作的参数是一个消息字符串,后面再跟一个或多个参数。构造最终的日志消息的时候我们使用了 % 操作符来格式化消息字符串。
如果你想使用配置文件,可以像下面这样修改 basicConfig() 调用:
logconfig.ini
在调用日志操作前先执行下 basicConfig() 函数方法 ,可以找标准输出或者文件中输出
basicConfig() 在程序中只能被执行一次。如果你稍后想改变日志配置,就需要先获取 root logger ,然后直接修改它。
更多见日志模块文档https://docs.python.org/3/howto/logging-cookbook.html
“你想给某个函数库增加日志功能,但是又不能影响到那些不使用日志功能的程序。”
对于想要执行日志操作的函数库,你应该创建一个专属的 logger 对象,并且像下面这样初始化配置:
使用这个配置,默认情况下不会打印日志,只有配置过日志系统,那么日志消息打印就开始生效
通常来讲,不应该在函数库代码中 自己配置日志系统 ,或者是已经有个已经存在的日志配置了。调用 getLogger( name ) 创建一个和调用模块同名的 logger 模块 。由于 模块 都是唯一的,因此创建的 logger 也将是唯一 的。所以当前进程中只有一个logging会生效。
log.addHandler(logging.NullHandler()) 操作将一个 空处理器 绑定到刚刚已经创建好的 logger 对象 上。一个空处理器默认会忽略调用所有的日志消息。因此,如果使用该函数库的时候还没有配置日志,那么将不会有消息或警告出现。
在这里,根日志被配置成仅仅 输出 ERROR 或更高级别的消息 。不过, somelib 的日志级别被单独配置成可以输出 debug 级别的消息, 它的优先级比全局配置高。像这样更改单独模块的日志配置对于调试来讲是很方便的,因为你无需去更改任何的全局日志配置——只需要修改你想要更多输出的模块的日志等级。(这个还有待研究)
“你想记录程序执行多个任务所花费的时间”
time 模块 包含很多函数来执行跟时间有关的函数。尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。
这个类定义了一个可以被用户根据需要启动、停止和重置的计时器。它会在elapsed 属性中记录整个消耗时间。下面是一个例子来演示怎样使用它:
这里通过 __enter__,__exit__ ,使用 with 语句 以及上下文管理器协议可以省略计时器打开和关闭操作。(关于上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 __enter__和__exit__方法, , __enter__ 在出现with语句被调用, __exit__ 在代码执行完毕被调用,可以参考open()方法)
在计时中要考虑一个 底层的时间函数问题 。 一般来说, 使用 time.time() 或 time.clock() 计算的时间精度因操作系统的不同会有所不同。而使用 time.perf_counter() 函数可以确保使用系统上面 最精确的计时器 。
“你想对在 Unix 系统上面运行的程序设置内存或 CPU 的使用限制。”
resource 模块 能同时执行这两个任务。例如,要限制 CPU 时间,下面的代码在windows平台执行不了,但是Linux是可以的。
程序运行时, SIGXCPU 信号 在时间过期时被生成,然后执行清理并退出。
这暂时没有好的Demo...
程序运行到没有多余内存时会抛出 MemoryError 异常。
setrlimit() 函数 被用来设置特定资源上面的 软限制和硬限制 。
setrlimit() 函数 还能被用来设置 子进程数量、打开文件数以及类似系统资源的限制(cgroup) 。
“通过脚本启动浏览器并打开指定的 URL 网页”
webbrowser 模块 能被用来启动一个浏览器,并且与平台无关
新窗口打卡网站
当前窗口打开一个tab页
指定浏览器类型,可以使用 webbrowser.get() 函数
‘陆’ linux下编写一个shell脚本,实现自动安装软件
Linux下Oracle的自动安装脚本,基本上就是yes和no
分享一个Linux下安装ASM+ORACLE的自动化脚本
http://blog.csdn.net/johnlongyuan/article/details/48416019
‘柒’ linux 自动备份和恢复的脚本
Linux是公认的运行稳定、安全性较高的操作系统,但是服务器硬件故障和各种意外因素都会导致Linux服务器硬盘上数据丢失。特别对于运用在商业领域中的Linux服务器,数据的安全性、完整性和灾难后的数据恢复能力是每一个Linux系统管理员最为关心的问题。Linux作为新一代网络操作系统,在服务器方面的应用越来越广泛。作为专门的网络服务器,一个重要功能就是对服务器数据进行备份,以确保数据的安全。
常见的Linux数据备份方法
Linux操作系统中的数据备份工作是Linux系统管理员的重要工作和职责。传统的Linux服务器数据备份的方法很多,备份的手段也多种多样。常见的Linux数据备份方式仅仅是把数据通过TAR命令压缩拷贝到磁盘的其它区域中去。还有比较保险的做法是双机自动备份,不把所有数据存放在一台计算机上,否则一旦这台计算机的硬盘物理性损坏,那么一切数据将不复存在了。所以双机备份是商业服务器数据安全的基本要求。通常情况下使用的双机备份是双机定时备份文件,而不是实时的。要实现双机备份,必须先在单机上备份所有的文件,然后再把备份文件传输到其它机器上。这样可能比较麻烦,而且有不足之处。例如,这样做对于不需要备份的文件也要在网络上传输,会造成带宽的浪费。
实现备份与刻录的整合
为了弥补Linux上常见备份方法的不足,本文将讲述使用sitback软件将Linux服务器磁盘中的指定数据进行自动备份,并刻录到CDR光盘的方法,以达到数据在光盘中安全存储的目的。此方法将数据备份和光盘刻录两个步骤整合在一起,自动化程度和安全性较高,而且sitback还能实现Linux网络中不同计算机之间的数据备份。
sitback简介
sitback是一款基于开源协议开发的Unix平台下的自动备份软件。与一些 Linux开放源码软件不同,sitback开发者仅提供源代码压缩包的形式给Linux用户下载。尽管sitback没有提供安装方便的RPM格式,但是sitback的安装采用了基于GNU协议的自动安装和配置的automake/autoconf模式,使得一般的Linux系统管理员能顺利地安装调试好sitback。
sitback的获取和安装
目前sitback官方网站www.mrbean.dk提供的 sitback最高版本为0.3.1。为了能最大程度地体现sitback的最佳性能,sitback的开发者建议Linux用户不要把sitback的开发版本和Beta测试版本使用到实际的数据备份中去,以防出现意外。
安装sitback源代码压缩包可以根据以下几个简单的步骤完成:
◆建立临时解压目录 /temp;
◆把sitback压缩包拷贝到/temp目录,并使用“tar xvfz sitback-x.x.x.tar.gz”命令对sitback源代码压缩包进行解压;
◆执行./configure;
◆执行make;
◆执行make install。
通过以上几个步骤可以迅速地安装好sitback。请注意使用超级用户root身份对sitback进行安装。
编译完sitback源代码压缩包之后,接着要在用户根目录中的Home目录下创建一个.sitback目录。该目录用来存放一些数据备份和刻录时产生的临时文件,以及一些脚本文件或磁盘驱动器参数文件。
同所有通过编写脚本文件来运行的程序一样,sitback也需要Linux用户自行编写备份和刻录的脚本文件,并让Linux系统把sitback当作一个备份进程(backup-daemon)来自动执行。使用高效安全的Webmin管理系统来自动执行sitback也很方便。总之,用最少的代码编写出适合Linux系统实际情况的脚本是最为安全、高效的。
将数据刻录至光盘的条件
让sitback自动备份指定的磁盘数据,并将备份的数据直接刻录到光盘中去,必须考虑的条件主要有以下几点:
◆sitback运行的时间,即备份数据时间;
◆要备份的源目录;
◆要备份到的目的目录;
◆选择存储介质,包括磁介质、光存储介质等;
◆是否要对备份数据进行校验比较,提高备份安全性;
◆备份模式,全备份或部分数据备份;
◆备份数据还原问题。
sitback提供了很多参数供用户选择,具体参数和用法可以参考sitback源代码压缩包里的开发文档和详细的使用手册。
实例运用
实例1
假设某Linux服务器中有以下这些目录:
◆/usr/smbdata 包含大多数应用软件和用户数据文件;
◆/usr/grafik 包含有重要的图形文件。
为了备份以上两个目录数据,可以编写一个脚本文件,代码及说明如下:
ARCHIVE=/dev/st0
#定义要备份的数据
(ARCHIVE表示要备份的磁盘驱动器、文件目录,甚至主机,例如:
“backuphost:/dev/st0”、
“backup@backuphost:/dev/nrt0”、
“[email protected]:/tmp/temp_backup.tar.gz”等)
TARGET=/usr/smbdata
#要备份的目的目录
TARGET=/usr/grafik
#要备份的目的目录
COMPRESSION=YES
#备份模式为对数据进行压缩后备份
VERIFY=YES
#对备份数据进行校验
REPORTFILE=/usr/smbdata/latest_backup.txt
#产生备份报告文件
REPORTPRINTER=//penguin4/Canon
#打印机信息
SMBUSER=computer1
#SAMBA用户端计算机名
SMBPASSWD=123abc
#访问密码
VOLUMENAME=Full backup - Taastrup
TIME=1;02;00
#备份时间,每天2:00进行备份
TIME=2;02;00
TIME=3;02;00
TIME=4;02;00
TIME=5;02;00
TIME=6;02;00
以上是一个简单的数据自动备份脚本的样本文件。如果想使用SysV初始化,可以在/etc/rc.d/init.d/中创建一个小的脚本文件来运行 sitback。在上述脚本最后一行加入“/usr/local/bin/sitback -d data”才能使得sitback自动运行。查看每次备份的情况时,可以打开临时文件/.sitback/sitback.log,里面有sitback 运行的详细记录。
实例2
使用sitback将Linux服务器中数据自动备份、刻录两个步骤进行整合。
为了达到数据备份和光盘刻录整合的目的,需要使用以下脚本来实现。它是来自sitback官方网站的样板脚本。
# Full backup of /home/bean, excluding Images
#对/home/bean,目录进行全备份
# [email protected] 2002
# Write the archive to my cd-writer at 0,0,0
#将备份数据在指定时间写入CDR刻录机中
# (Iomega ZIPCD 650, USB), use speed=2, so that i can 刻录机硬件参数
# do other things while the backup is cooking. Also
# use on-the-fly to avoid too much temporary data.
# (my machine has no problem supporting this)
#
ARCHIVE=0,0,0
SPEED=2
#Iomega ZIPCD 650, USB刻录机写入速度,
CD ON THE FLY
#写入方式
# It is a huge advantage to have the files directory available
# on the cd, not inside an archive, when restoring my
# setup, hence the type 'CDRW'
#
TYPE=CDRW
#光盘类型,CDRW可擦写光盘
# Targets... Exclude Images
TARGET=/home/bean
#目标文件目录
EXCLUDE=/home/bean/Images
#目标文件目录中不用备份的目录(即排除备份的目录)
# Various stuff. Compression and verification will automagically
# be turned off by sitback, but i do not want the warnings either,
# so i just turn it off from the beginning...
#
VERIFY=NO
#对备份数据进行校验
COMPRESSION=NO
#备份数据无需压缩
# When done, put a backup report in /home/bean/backup.log
#
REPORTFILE=/home/bean/backup.log
#产生的备份报告文件及路径
关于sitback备份数据的恢复及SSH等安全措施,此处不予举例说明。总的来说,sitback是一款不可多得的Linux操作系统平台中优秀的数据备份和恢复工具,使用sitback可以使得企业实现安全而高效的备份。
‘捌’ Linux里面自动化部署工具有哪些
1. Puppet
Puppet是一款开源工具,旨在为系统管理员大大简化自动化和报告工作。它基本上是款配置管理软件,有助于配置和维护企业网络中的服务器及其他系统。系统管理员通常每天要花大量时间重复做同样的任务。他们总是想要使这些任务实现自动化,以便有更多的时间来处理其他项目或学习新的概念和脚本语言。管理员可以通过编写脚本使任务实现自动化,但是在拥有大型网络的公司,脚本不是很方便。这时候,Puppet就大有用场,因为借助Puppet,你可以:
为网络上的每个主机定义独特的配置设置;
不断监测网络,查找任何变动;
帮助高效地创建和管理用户;
帮助管理每个开源工具的配置设置。
2. CHEF
Chef是另一款可供Linux系统管理员使用的流行的自动化工具。它用Ruby和Erlang编写,对于配置和维护公司的服务器大有帮助,无论贵公司拥有十台服务器还是上百台。它还可以帮助你将云端服务器与亚马逊EC2、OpenStack、RackSpace或谷歌云整合起来。Chef可以将你的基础设施转变成代码,那样借助代码,你只要更改几行代码,就能轻松撤下一台服务器,从而让你轻松管理服务器。物理节点还意味着:将变更内容部署到生产环境之前,可以对它轻松进行测试,你还可以轻松控制针对代码的每次更新的版本。Chef DK为你提供了测试和管理配置的所有工具,Chef Server充当你所有“菜谱”(recipe)的存储库,可以管理与服务器连接的每个节点。Chef客户软件在每个客户端上运行,时不时收到服务器方面的信息,从而更新其配置设置。
3. CFEngine
面向Linux系统管理员的下一款自动化工具是CFEngine,这是另一个领先的自动化系统,可帮助你轻松管理整套基础设施,并使之实现自动化。一旦你使用CFEngine为网络中的系统定义了配置,那么CF Engine就会自动确保配置符合规范。不用说,如果你的网络中有10个或100个节点,可以在短短几秒内更新或改动任何一个节点或所有节点。CFEngine之所以受到许多Linux系统管理员的青睐,是由于它运行成本低、响应速度快、具有自愈合功能。
4. Ansible
Ansible是Red Hat提供的一款开源配置管理和IT企业自动化软件,随带一种简单的编程语言,让系统管理员能够高效地处理自动化和配置过程。Ansible由控制机器和控制机器控制的节点组成。节点是通过SSH来加以控制的。Ansible的主要特点之一是代理并不是部署到节点 ,但是完全借助SSH来进行通信。易学易用、具有一致性、高可靠性和安全性是让Ansible脱颖而出的其他特性。Ansible的唯一局限就是无法配置裸机和虚拟机。
5. Foreman
Foreman是另一种用于取证分析的开源配置管理工具。Foreman提供了仪表板,我们可以通过仪表板来配置裸机服务器和虚拟机。默认情况下,无论我们何时安装Foreman,它都使用Puppet作为配置工具。不过借助插件,Foreman还支持与其他配置管理工具整合起来,比如Chef、Puppet、Ansible、Salt及其他众多工具。Foreman自动化工具还随带各种各样的接口,包括命令行接口、Web前端以及REST API。Foreman的其他一些显着功能包括如下:
通过仪表板,管理Puppet模块和puppet类方面的改动;
很容易从Foreman仪表板来管理Puppet环境;
由于仪表板,创建主机群(Hosts Group)以及为主机群添加puppet模块变得很轻松;
可以从Foreman仪表板,轻松添加Puppet模块或推送到节点。
6. Katello
Katello是另一种开源自动化工具。换而言之,我们可以说Katello是一种开源版的Red Hat satellite Server;如果我们不想花钱在企业产品及其支持上,就可以用它来代替Red Hat satellite Server。Katello已被Foreman收购,Foreman中的大部分功能在Katello中也得到了支持。Katello Server的主要功能如下:
给基于Linux的服务器(RHEL和CentOS )打补丁;
使用Pulp Service来同步代码库;
使用Foreman进行各种配置;
它还可以处理订阅内容管理,并审计所有已部署的软件包;
借助Katello,你可以为所有主机创建主机群,另外还可以在单一主机或一群主机上批量执行操作。
7. Nagios
Nagios现在名为Nagios Core,它是一种开源自动化和监控工具,可以管理基础设施中的所有系统。它还提供警报服务,一旦察觉到你的网络中哪里有问题,就会提醒系统管理员。借助SNMP以及Nagios,系统管理员还可以控制并管理打印机、路由器和交换机。Nagios让我们得以创建事件处理工具,一旦某个应用程序及其服务停运,就可以自动重启出现故障的那个应用程序及其服务。