Devstack — screen 调试工具的使用
目录
为什么要使用 screen 工具 ?
当 Devstack 编译安装完 OpenStack 后,我们是不能通过 init 脚本或者 service 指令来与各个 Openstack Services 进行交互的。
也就是说我们无法像使用 RDO 安装那样可以通过 systemctl restart openstack-nova-api.serice 来重启 nova-api 服务。
因为 Devstack 的设计初衷是便于 Openstack developers 开发和调试 Openstack 代码,所以 Devstack 只能通过 screen 来启动服务,而且每一个 Openstack Services 都是一个子 screen 。Devstack 部署的 Openstack 相信大家都会遇见一个问题,当物理机重启后 Services 怎么重启,其实只需要执行 ./rejoin-stack.sh就好了,其原理跟启动 screen 是一样的,将没有启动的 Services 启动,已经启动的不会被覆盖,启动完成后自动进入 screen 。在 screen 中我们不仅仅可以启动 Services ,我们还能够非常清晰简便的切换查看各个 Services 的 Log 。本篇主要介绍了 screen 的使用,应该是多有 Openstack 开发者的必备技能吧。
启动 screen
screen -x stack
注意:如果启动失败,可以尝试在执行下面的指令之后在重新尝试启动:
script /dev/null
可以看见 Terminal 最下方有一串白色的字符串,其中的每一个数字对应一个子 screen 也就是一个 Openstack services 。
我们可以通过快捷键+数字的组合来切换到对应的子 screen 。’ * ‘ 所在的处的位置表示当前的 screen 是该 Service 的 screen。EXAMPLE:
14$(L) c-api 15-$(L) c-sch 16$(L) c-vol*
screen 的切换(常用)
CTRL+a + number :切换到数字 number 对应的子 screen 中(number == 0 ⇒ shell)
CTRL + a + ’ ⇒ 输入number:当 number > 10 时,可以使用这种方法来切换,当然 number < 10 时,也可以使用。 推荐*
CTRL + a + n :切换到下一个 screen
CTRL + a + p:切换到前一个 screen
CTRL + a + a:返回上一个 screen
CRTL + a + 稍等一秒 + shift + ‘:显示所有的 screen 的列表
CTRL + [:开始滚动模式 ,然后可以使用上下左右键滚屏
CTRL + ]:退出滚动模式
CTRL + a + H :保存 screen 到日志文件,再按一次停止保存
CTRL + a + ?:获取帮助信息
退出和重新连接 screen
退出:
- CRTL + a + ’ ⇒ 输入 0 ,然后再输入
screen -d - CRTL + a + d
- CRTL + a + ’ ⇒ 输入 0 ,然后再输入
重新连接:
#查看当前用户启动的 screen
fanguiju@jmilkfan:~$ screen -ls
There is a screen on:
20569.stack (08/02/16 11:36:47) (Detached)
1 Socket in /var/run/screen/S-fanguiju.
#上一条指令的Output
fanguiju@jmilkfan:~$ screen -r 20569
Restart Openstack Services
CTRL + c:终止一个 screen ,Stop the services
进入希望 Restart 的 Openstack Services 的 screen 中,然后输入 CTRL + c 结束这个进程,输入 ↑并重新执行上一条指令。
screen 指令选项总览
fanguiju@fanguiju:~/devstack$ screen --help
Use: screen [-opts] [cmd [args]]
or: screen -r [host.tty]
Options:
-4 Resolve hostnames only to IPv4 addresses.
-6 Resolve hostnames only to IPv6 addresses.
-a Force all capabilities into each window's termcap.
-A -[r|R] Adapt all windows to the new display width & height.
-c file Read configuration file instead of '.screenrc'.
-d (-r) Detach the elsewhere running screen (and reattach here).
-dmS name Start as daemon: Screen session in detached mode.
-D (-r) Detach and logout remote (and reattach here).
-D -RR Do whatever is needed to get a screen session.
-e xy Change command characters.
-f Flow control on, -fn = off, -fa = auto.
-h lines Set the size of the scrollback history buffer.
-i Interrupt output sooner when flow control is on.
-l Login mode on (update /var/run/utmp), -ln = off.
-ls [match] or -list. Do nothing, just list our SockDir [on possible matches].
-L Turn on output logging.
-m ignore $STY variable, do create a new screen session.
-O Choose optimal output rather than exact vt100 emulation.
-p window Preselect the named window if it exists.
-q Quiet startup. Exits with non-zero return code if unsuccessful.
-r [session] Reattach to a detached screen process.
-R Reattach if possible, otherwise start a new session.
-s shell Shell to execute rather than $SHELL.
-S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title Set title. (window's name).
-T term Use term as $TERM for windows, rather than "screen".
-U Tell screen to use UTF-8 encoding.
-v Print "Screen version 4.01.00devel (GNU) 2-May-06".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x Attach to a not detached screen. (Multi display mode).
-X Execute <cmd> as a screen command in the specified session.
Openstack 重启指令
screen 有一个非常不方便的地方就是,有些电脑不能通过 CTRL + [|] 来实现屏幕的滚动,这根本无法很好的观察 Log ,所以建议将启动指令 Copy 另外一个 Terminal 执行。
注意:下列的指令的/opt/stack/参数因各人的安装路径不同而异。
restart glance:
glance-api
/usr/local/bin/glance-api --config-file=/etc/glance/glance-api.conf & echo $! >/opt/stack/status/stack/g-api.pid; fg || echo "g-api failed to start" | tee "/opt/stack/status/stack/g-api.failure"
glance-registry
/usr/local/bin/glance-registry --config-file=/etc/glance/glance-registry.conf & echo $! >/opt/stack/status/stack/g-reg.pid; fg || echo "g-reg failed to start" | tee "/opt/stack/status/stack/g-reg.failure"
nova-api
sudo /usr/local/bin/nova-api & echo $! >/opt/stack/status/stack/n-api.pid; fg || echo "n-api failed to start" | tee "/opt/stack/status/stack/n-api.failure"
nova-conduter
/usr/local/bin/nova-conductor --config-file /etc/nova/nova.conf & echo $! >/opt/stack/status/stack/n-cond.pid; fg || echo "n-cond failed to start" | tee "/opt/stack/status/stack/n-cond.failure"
nova-crt
/usr/local/bin/nova-cert --config-file /etc/nova/nova.conf & echo $! >/opt/stack/status/stack/n-crt.pid; fg || echo "n-crt failed to start" | tee "/opt/stack/status/stack/n-crt.failure"
nova-network
/usr/local/bin/nova-network --config-file /etc/nova/nova.conf & echo $! >/opt/stack/status/stack/n-net.pid; fg || echo "n-net failed to start" | tee "/opt/stack/status/stack/n-net.failure"
nova-scheduter
/usr/local/bin/nova-scheduler --config-file /etc/nova/nova.conf & echo $! >/opt/stack/status/stack/n-sch.pid; fg || echo "n-sch failed to start" | tee "/opt/stack/status/stack/n-sch.failure"
nova-novnc
/usr/local/bin/nova-novncproxy --config-file /etc/nova/nova.conf --web /opt/stack/noVNC & echo $! >/opt/stack/status/stack/n-novnc.pid; fg || echo "n-novnc failed to start" | tee "/opt/stack/status/stack/n-novnc.failure"
nova-cauth
/usr/local/bin/nova-consoleauth --config-file /etc/nova/nova.conf & echo $! >/opt/stack/status/stack/n-cauth.pid; fg || echo "n-cauth failed to start" | tee "/opt/stack/status/stack/n-cauth.failure"
nova-cpu
sg libvirtd '/usr/local/bin/nova-compute --config-file /etc/nova/nova.conf' & echo $! >/opt/stack/status/stack/n-cpu.pid; fg || echo "n-cpu failed to start" | tee "/opt/stack/status/stack/n-cpu.failure"
restart cinder:
c-api
/usr/local/bin/cinder-api --config-file /etc/cinder/cinder.conf & echo $! >/opt/stack/status/stack/c-api.pid; fg || echo "c-api failed to start" | tee "/opt/stack/status/stack/c-api.failure"
c-sch
/usr/local/bin/cinder-scheduler --config-file /etc/cinder/cinder.conf & echo $! >/opt/stack/status/stack/c-sch.pid; fg || echo "c-sch failed to start" | tee "/opt/stack/status/stack/c-sch.failure"
c-vol
/usr/local/bin/cinder-volume --config-file /etc/cinder/cinder.conf & echo $! >/opt/stack/status/stack/c-vol.pid; fg || echo "c-vol failed to start" | tee "/opt/stack/status/stack/c-vol.failure"
Devstack — screen 调试工具的使用的更多相关文章
- 学习OpenStack之 (3):Devstack Screen 使用技巧
Devstack环境中,openstack运行在一个screen中,每个service运行在一个window中.我总结的几个tips: 0. 注意需要使用screen启动用户来进行一下操作 1. 查看 ...
- devstack screen 详解
n my previous blog i discussed how to install devstack based openstack. Now if I need to restart ind ...
- 拒绝从入门到放弃_《Openstack 设计与实现》必读目录
目录 目录 关于这本书 必看知识点 最后 关于这本书 <Openstack 设计与实现>是一本非常值得推荐的书,为数不多的 Openstack 开发向中文书籍中的精品.如果希望从事 Ope ...
- AODH: ALARM EVENTS IN OPENSTACK
AODH是从Ceilometer分离出来的一个子项目,开始于OpenStack Liberty,用来提供alarm机制. 除了之前Ceilometer有的基于sample的警报机制,AODH还添加了基 ...
- openstack(liberty): devstack之screen
在devstack的stack.sh文件中,可以看到所有配置的service启动方式有两种,根据是否USE_SCREEN进行是在screen window中启动,还是直接起. 默认情况,USE_SCR ...
- 利用Screen重启DevStack服务
上篇介绍了DevStack如何安装部署.集成化工具有好处,但在系统重启后,OpenStack的各个服务并不会随系统重启而启动,需要利用screen来重启,接下来就记录下如何使用screen. 准备工作 ...
- 部署 DevStack - 每天5分钟玩转 OpenStack(17)
本节按照以下步骤部署 DevStack 实验环境,包括控制节点和计算节点 创建虚拟机 按照物理资源需求创建 devstack-controller 和 devstak-compute 虚拟机 安装操作 ...
- 学习OpenStack之 (1):安装devstack
1. 系统准备 ubuntu 12.04 server 虚拟机. 2G内存. 依次运行以下命令来安装git: sudo apt-get update sudo apt-get upgrade sudo ...
- openstack(liberty): devstack之stack.sh分析
学习openstack,从devstack入手,是个不错的选择.devstack中,首先需要分析stack.sh都做了些什么! 这里面涉及到了很多shell的基础知识.我就做个简单的梳理,方便后续查阅 ...
随机推荐
- SQL SELECT DISTINCT
SQL SELECT DISTINCT(选择不同) 语法 SELECT DISTINCT语法用于仅返回不同的(different)值. 在一张表内,一列通常包含许多重复的值; 有时你只想列出不同的(d ...
- Shiro学习(9)JSP标签
Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮. 导入标签库 Java代码 <%@taglib prefix="shiro&qu ...
- NOIP模拟测试19
T1: 题目大意:将一颗有N个节点的树分割,使得每个联通块大小相等,问一共有多少方案.(N<=1000000) 首先,一条很显然的性质,每个联通块的大小一定是N的因子. 然后,我们可以对于每个因 ...
- Android中的Service的使用详解
按运行地点分类: 类别 区别 优点 缺点 应用 本地服务(Local) 该服务依附在主进程上, 服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不 ...
- AcWing 138. 兔子与兔子 hash打卡
很久很久以前,森林里住着一群兔子. 有一天,兔子们想要研究自己的 DNA 序列. 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母). 然后我们每 ...
- 在C#.NET中,如何生成PDF文件?主要有以下几个途径
1.使用.NET文件流技术:若通过.NET的文件流技术生成PDF文件,必须对PDF文件的语法很清楚,例如BT表示实体内容开始:ET表示实体内容结束:TD表示换行等等.我们可以从Adobe的官方网站上下 ...
- rbd_rados命令拷屏
mimic或者luminous rbd_rados sudo mount -t ceph 192.168.7.151:6789:/ /mnt -o name=admin,secret=AQBaPZNc ...
- try-with-resources 让java资源关闭代码更简洁
一.JDK7的资源关闭方式优化 1 try-with-resource语法 在JDK7以前,Java没有自动关闭外部资源的语法特性,直到JDK7中新增了try-with-resource语法,才实现了 ...
- Fiddler设置抓一个域名下个包
设置抓一个域名下个包 右侧Filters 勾选Use Filters 勾选Hosts 选择 Show only the follwing Hosts 设置好自己的抓包的域名
- Java获取CPU占用率
原文链接:https://www.jianshu.com/p/015cc4805e29 最近做一个Java性能统计的问题,需要统计当前进程占用CPU的情况,最开始使用Java MxBean来获取 Op ...