From : http://www.oschina.net/p/rundeck/similar_projects?sort=view&lang=25

RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。

RunDeck的作用:

  1. 在浏览器中执行服务器上任何非交互命令,比如ps, /etc/init.d/xxx restart,注意ssh之类的要在执行中输入密码的肯定不支持

  2. 对接服务器上的一键运维脚本,变成一个Job, 执行时只要点击按钮Run

  3. 自动记录命令操作记录和输出。

预览一下官网的几张图片:

Share Standard Operating Procedures

Job Scheduler

Automated Deployment After a Build

Self-Service Test Environments

Data Processing Jobs in the Cloud

注意: 上面的几张部署图中的rundeck方块,如果替换成“命令行运维脚本”,照样能完成各自的目的,但是命令行相比RunDeck,缺少了两样Rundeck特有的特性:
- 在浏览器上按钮操作
- 记录命令的执行记录和输出结果

再看看Rundeck执行Job时的屏幕截图:

Rundeck与自动化工具Fabric的对比

Fabric 是一个 Python (2.5 或更高) 库和命令行工具,用于连接到 SSH 服务器并执行命令。

Rundeck服务运行的结点称为Server,Rundeck还可以添加其他结点叫node,只要设置自动登录所需的ssh帐号和密码,Rundeck就能涵盖Fabric的功能,但是不推荐这样使用,一旦Rundeck服务器无效,就连在命令行完成这些运维也不可能了。

建议的使用方式是:所有运维脚本都存放在Rundeck服务器上,提供命令行调用和RunDeck调用两种方式,为命令行调用提供交互输入帐号和密码的功能,为Rundeck调用提供参数输入帐号和密码的功能。

Rundeck的安全问题

在浏览器中打开Rundeck服务器,并登录后,执行命令的帐号和权限,就是启动Rundeck服务的帐号和权限。
所以如果以root启动Rundeck服务,那么在Rundeck中输入任何命令,都是以root执行,包括rm -rf /,init 0等危险操作都可执行。
建议专门建立rundeck帐号启动Rundeck服务,并控制rundeck帐号的权限。

RunDeck Web界面的登录帐号管理,默认管理员帐号是admin,密码admin,帐号和密码信息,只保存在配置文件中,可用的group是admin和user,可以设置user的权限,比如定义job,执行job等。更高级的权限得使用付费版的RunDeck Pro。

RunDeck服务器的资源消耗

RunDeck服务是一个standalone jar包,占用内存约500M。

RunDeck服务器上已定义Job的执行方式

  1. Web界面上点击Run人工执行

  2. 通过RunDeck的命令行工具run执行

  3. RunDeck中设置为周期执行,就像cron一样。

  4. 通过Rest API,由其他http client执行,比如curl命令。

上面第2种方式,用命令行工具run执行RunDeck job,好像有点多此一举,但正是此方式特别适用于手工或自动的服务器状态巡查。巡查必须要留下记录,不然只是巡查者的一面之辞。

RunDeck服务器上Job的执行如何判断成功或失败

很简单,执行后,如果rc是0,就是成功,否则就是失败。
rc(Return Code),可以这样查看rc:

shen@debian:~$ ls / 2>1 >/dev/null; echo $? 0 shen@debian:~$ ls /asdfsdf 2>1 >/dev/null; echo $? 2

RunDeck安装与使用实例

RunDeck,是我到现在为止,用过的Web服务器中,安装和使用最简单的。

第1步:在准备安装Rundeck服务的Linux机器上安装jre,推荐OpenJDK

Redhat/CentOS

sudo yum install openjdk-7-jre

Debian/Ubuntu

sudo apt-get install openjdk-7-jre

下面是安装后的版本信息:

shen@debian:~$ java -version
java version "1.7.0_79" OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

第2步:下载rundeck jar包,并启动服务器

http://rundeck.org/downloads.html

下载 rundeck-launcher-2.5.1.jar,官方说明如下:

Put it in a directory named ~/rundeck
Execute:
java -jar rundeck-launcher-2.5.1.jar

下载有点慢(晚上下载速度5KB/s,早上7点893KB/s),我已下载并放在百度云盘上: http://pan.baidu.com/s/1i3EMcNb。

我放在目录/home/shen/rundeck下运行:

cd /home/shen/rundeck
java -jar rundeck-launcher-2.5.1.jar

最行一行输出的:Started表示已启动完成,:4440表示服务的端口为4440

浏览器中输入网址: http://localhost:4440

输入帐号admin,密码admin,登录:

第3步:创建一个Project,比如adhoc,先体验一下在Web输入和执行命令。


因为只在Rundeck服务器上运行本地命令,所以Resource Model Source删除yml文件,Default Node Executor选择Stub,Default Node File Copier也选择Stub。

进入顶上Tab: Commands

执行本地命令 pwd,应该输出:/home/shen/rundeck




点击Run on 1 Node:

pwd命令的输出:/home/shen/rundeck正是rundeck服务启动位置。

执行 whoami,应该输出:shen

上面两条命令返回状态都是绿色Successed,表示执行成功(rc=0),
接下去尝试一个返回失败的命令ls /asdfsdf


第3条命令返回状态都是红色Failed,表示执行失败(rc!=0),上图中输出的第1行是运行stderr输出,第2,3,4行是Rundeck额外输出,提示出错原因:**Return code was 2**

接下去看看已经执行的3条命令的执行记录和输出,这里体现了Rundeck的最重要的特性。直接在Terminal下执行命令,是不可能事后找回命令输出的。

点击网页第一行右上角的Activity:

上图展示了3条已执行命令的执行编号,命令输入、执行时间、执行者,成功或失败状态。

点击#3,进去查看第3条命令的执行详情:

点击标签页(Summary | Report | Log Output | Definition)中的Log Output,可以看到执行的输出,包括stdout和stderr:

点击View Options,可以设置某些选项:

下面点击网页右上角的Run Again:

更改命令为ls /asdfsdf /,并点击Run on 1 Node:

上图中只显示了输出结果的最后20行,点击#4进去看执行详情:

上图中列出了执行的所有stdout与stderr输出。

第4步:创建另一个Project,比如jobs(乔布斯, ),体验job的定义和一键执行。

点击“Create a new job”,或者点击右上角的Create Job > +New Job…

按下图输入Job Name和Description


在Add a Step中点击Execute an inline script

如上图,Enter the entire script to execute中输入ls /abcd1234 /
点击Save,保存Step定义,一个Job中可以有多个Step,我们的第一个Job是最简单的定义,只有一个步骤,该步骤中直接包含1个命令。


点击Create完成Job定义:

点击Run Job Now:

查看Log Output:

点击网页左上角的RUNDECK,回到首页:

点击Project jobs的链接“1 Execution In the last day”:

可以看到此Project的最近Job或Command的执行历史。

点击网页第一行的Jobs可以看到该Project的Job列表:

下面在添加一个Job: how,探索一下Rundeck是怎么执行Job的。

Step定义为如下脚本:

echo '`pwd` ->' pwd echo '$0 ->' echo $0 echo '`ps` ->' ps

Job执行结果:

Job执行时,创建了一个/tmp/下的临时脚本文件:
/tmp/1-6-debian-dispatch-script.tmp.sh

ps列出的是ps进程及它的祖先进程,其他java就是rundeck服务。

[转]服务器自动化操作 RunDeck的更多相关文章

  1. 【自动部署】服务器自动化操作 RunDeck

    RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程.通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的 ...

  2. Saltstack自动化操作记录(1)-环境部署【转】

    早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...

  3. Saltstack自动化操作记录(1)-环境部署

    早期运维工作中用过稍微复杂的Puppet,下面介绍下更为简单实用的Saltstack自动化运维的使用. Saltstack知多少Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中 ...

  4. 基于facebook-wda的iOS自动化操作实践记录

    [本文出自天外归云的博客园] 原理 对于iOS自动化操作,主要靠WebDriverAgent来完成.在Mac电脑上连接真机iPhone,运行WebDriverAgentRunner会在Mac端启动WD ...

  5. Atitit.web的自动化操作与信息抓取 attilax总结

    Atitit.web的自动化操作与信息抓取 attilax总结 1. Web操作自动化工具,可以简单的划分为2大派系: 1.录制回放 2.手工编写0 U' z; D! s2 d/ Q! ^1 2. 常 ...

  6. Apache服务器常规操作

    导读 Apache是世界上排名第一的Web服务器,50%以上的Web服务器都在使用Apache,它几乎可以在所有计算机平台上运行.下面就由我给大家说说Apache服务器的一些常规操作. Apache服 ...

  7. splinter python浏览器自动化操作,模拟浏览器的行为

    Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果   最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有 ...

  8. Python实现浏览器自动化操作

    Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼     最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...

  9. [转载]Python实现浏览器自动化操作

    原文地址:Python实现浏览器自动化操作作者:rayment   最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...

随机推荐

  1. Gnome排序算法

    Gnome排序(地精排序),起初由Hamid Sarbazi-Azad 于2000年提出,并被称为stupid排序,后来被Dick Grune描述并命名为“地精排序”,作为一个排序算法,和插入排序类似 ...

  2. iOS设计模式之工厂方法模式

    工厂方法模式 基本理解 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 简单工厂的最大优点就是工厂类中包含了必要的逻辑判断,根据客户端的选择 ...

  3. iOS设计模式之单例模式

    单例模式 基础理解 所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效. 单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全 ...

  4. iOS 开发技巧-制作环形进度条

    有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现. 先看一下这篇博客,博客地址:ht ...

  5. iOS网络-01-NSURLRequest与NSURLConnection

    NSURLRequest NSURLRequest封装了一次网络请求所需要的数据,主要封装了以下信息: 请求路径(URL) 请求方法(GET或POST) 请求头 请求体 超时参数 NSURLReque ...

  6. Xcode 插件失效的临时解决方案

    每当Xcode升级之后,都会导致原有的Xcode插件不能使用,这是因为每个插件的Info.plist中记录了该插件兼容的Xcode版本的DVTPlugInCompatibilityUUID,而每个版本 ...

  7. Unity3D插件分享

    网上看到一个讲unity3D插件的,看着不错,转载过来. 本文汇总了近百个Unity3D插件,供大家参考下载. 2D_Toolkit_1.51 动画开发插件包 FingerGestures 触摸插件 ...

  8. java使用httpcomponents 上传文件

    一.httpcomponents简介 httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程.我们可以用它在代码中直接发送htt ...

  9. Linux Crash/Hang on Bay Trail/J1900/N2940

    近几年的linux kernel, 尤其是4.1以后,在Bay Trail平台上会随机挂起和死机,亲测j1900,死机非常频繁,而且死机前毫无征兆,直接就挂起了,console也没有相应. 这个问题在 ...

  10. TCP连接与关闭

    1.建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和S ...