RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。
在浏览器中执行服务器上任何非交互命令,比如ps, /etc/init.d/xxx restart,注意ssh之类的要在执行中输入密码的肯定不支持
对接服务器上的一键运维脚本,变成一个Job, 执行时只要点击按钮Run
自动记录命令操作记录和输出。
Share Standard Operating Procedures
Automated Deployment After a Build
Self-Service Test Environments
Data Processing Jobs in the Cloud
注意: 上面的几张部署图中的rundeck方块,如果替换成“命令行运维脚本”,照样能完成各自的目的,但是命令行相比RunDeck,缺少了两样Rundeck特有的特性:
- 在浏览器上按钮操作
- 记录命令的执行记录和输出结果
Fabric 是一个 Python (2.5 或更高) 库和命令行工具,用于连接到 SSH 服务器并执行命令。
Rundeck服务运行的结点称为Server,Rundeck还可以添加其他结点叫node,只要设置自动登录所需的ssh帐号和密码,Rundeck就能涵盖Fabric的功能,但是不推荐这样使用,一旦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服务是一个standalone jar包,占用内存约500M。
Web界面上点击Run人工执行
通过RunDeck的命令行工具run执行
RunDeck中设置为周期执行,就像cron一样。
通过Rest API,由其他http client执行,比如curl命令。
上面第2种方式,用命令行工具run执行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,是我到现在为止,用过的Web服务器中,安装和使用最简单的。
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)
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
因为只在Rundeck服务器上运行本地命令,所以Resource Model Source删除yml文件,Default Node Executor选择Stub,Default Node File Copier也选择Stub。
执行本地命令 pwd,应该输出:/home/shen/rundeck
点击Run on 1 Node:
pwd命令的输出:/home/shen/rundeck正是rundeck服务启动位置。
上面两条命令返回状态都是绿色Successed,表示执行成功(rc=0),
接下去尝试一个返回失败的命令ls /asdfsdf
第3条命令返回状态都是红色Failed,表示执行失败(rc!=0),上图中输出的第1行是运行stderr输出,第2,3,4行是Rundeck额外输出,提示出错原因:**Return code was 2**
接下去看看已经执行的3条命令的执行记录和输出,这里体现了Rundeck的最重要的特性。直接在Terminal下执行命令,是不可能事后找回命令输出的。
点击网页第一行右上角的Activity:
上图展示了3条已执行命令的执行编号,命令输入、执行时间、执行者,成功或失败状态。
点击标签页(Summary | Report | Log Output | Definition)中的Log Output,可以看到执行的输出,包括stdout和stderr:
更改命令为ls /asdfsdf /,并点击Run on 1 Node:
上图中只显示了输出结果的最后20行,点击#4进去看执行详情:
上图中列出了执行的所有stdout与stderr输出。
点击“Create a new job”,或者点击右上角的Create Job > +New Job…
在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:
点击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、常用的调度工具:crontab、azkaban、rundeck、xxl_job 2、部署rundeck(先部署好满足版本要求的java) a.下载:rundeck.org--------Download Rundeck-------Rundeck Core(免费,功能弱一些)------Rundeck-launcher-*.jar b.将jar上传到li
安装rundeck #前提: #安装准备: #关闭防火墙和selinux以及NetworkManager systemctl stop firewalld systemctl disable firewalld systemctl stop NetworkManager systemctl disable NetworkManager sed -i.bak 's/SELINUX=enforcing
docker run -d -p 4440:4440 -e EXTERNAL_SERVER_URL=http://109.105.4.65:4440 -v/root/rundeck:/var/rundeck --name rundeck -t registry.bst-1.cns.bstjpc.com:5000/jordan/rundeck:latest 默认用户 admin/admin 查看ru
问题内容: 任何node.js专家都可以告诉我如何在机器启动时配置节点JS以自动启动服务器吗?我在Windows上 问题答案: 根本不需要在node.js中进行配置,这完全是操作系统的职责(在您的情况下为Windows)。实现此目的的最可靠方法是通过Windows服务。 有一个 超级简单的 模块,它可以将节点脚本安装为Windows服务,称为 节点窗口 (npm,github,documentat
我希望payara服务器作为服务运行。我以sudo的身份登录asadmin,并使用create-service命令。给出了以下输出。 这将在 /etc/init.d/ 文件夹中创建payara_production脚本,但一旦重新启动计算机,就不会执行此脚本。我必须手动启动payara才能运行它。 “您已经创建了服务,但是您需要自己启动它”是什么意思,我在之前使用的GlassFish版本中没有类似
本文向大家介绍如何自动化部署项目?折腾服务器之旅~,包括了如何自动化部署项目?折腾服务器之旅~的使用技巧和注意事项,需要的朋友参考一下 本篇文章讲的不是如何把一个项目部署上线,而是如何自动化上线。 开发了一个需求管理和发布系统。 通过这个系统,可以创建需求、创建发布计划、创建分支、部署到测试环境、部署到生产环境、正式上线、合并代码等。 一、功能设计 9.9元的阿里云服务器真的很慢,但还是足够折腾完
我用一个自动生成的服务运行100个JUnit测试。我有一个名为createArray的服务,该服务在ArrayList中添加值。问题是数组列表中保留的值。当一个新的测试用例运行时,它将自己的值添加到数组中。 每当新的测试用例运行时,我想清除自动生成的creatArray对象。
要从我们的兼容 Swift 的服务中获取数据,你可以执行 GET 请求,在身份验证期间使用 X-Storage-Url 的值来获取。 列出所有容器 一个指定API版本和帐户的 GET 请求将返回特定 用户帐户的容器列表。因为这个请求返回一个特定用户 的容器,所以该请求需要一个身份验证令牌。这种请求 不能匿名。 语法 GET /{api version}/{account} HTTP/1.1 Hos
个性化 Logo 及 CSS 样式 创建 <seafile-install-path>/seahub-data/custom 目录. 在 seafile-server-latest/seahub/media 目录下创建一个符号链接: ln -s ../../../seahub-data/custom custom. 升级过程中,Seafile 升级脚本会自动创建符号链接以维持个性化设置 个性化 L