devstack重启脚本是rejoin-stack.sh,但是我们在devstack中往往找不到这个文件,在stackoverflow上有人回答是bug,但似乎在每一个稳定版本中都会有这个脚本。
也就是说,如果大家需要这个重启的脚本,可以直接 git checkout 切换回之前的稳定的版本去找到这个脚本。
这是我从kilo中找到的脚本,放到devstack目录下直接运行即可。
#!/usr/bin/env bash
# This script rejoins an existing screen, or re-creates a
# screen session from a previous run of stack.sh.
TOP_DIR=`dirname $0`
# Import common functions in case the localrc (loaded via stackrc)
# uses them.
source $TOP_DIR/functions
source $TOP_DIR/stackrc
# if screenrc exists, run screen
if [[ -e $TOP_DIR/stack-screenrc ]]; then
if screen -ls | egrep -q "[0-9].stack"; then
echo "Attaching to already started screen session.."
exec screen -r stack
fi
exec screen -c $TOP_DIR/stack-screenrc
fi
echo "Couldn't find $TOP_DIR/stack-screenrc file; have you run stack.sh yet?"
exit 1
代码逻辑很简单,就是如果session都存在,那就恢复screen即可;如果session不存在,那就从devstack/stack-screenrc中读取创建session。
那我们接下来看一下stack-screenrc文件。
sessionname stack
hardstatus alwayslastline '%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})'
setenv PROMPT_COMMAND /bin/true
screen -t shell bash
screen -t key bash
stuff "sudo tail -f /var/log/apache2/keystone.log
"
logfile /opt/stack/logs/key.log.2016-03-31-183313
log on
screen -t key-access bash
stuff "sudo tail -f /var/log/apache2/keystone_access.log
"
logfile /opt/stack/logs/key-access.log.2016-03-31-183313
log on
screen -t g-reg bash
stuff "/usr/local/bin/glance-registry --config-file=/etc/glance/glance-registry.conf
"
logfile /opt/stack/logs/g-reg.log.2016-03-31-183313
log on
screen -t g-api bash
stuff "/usr/local/bin/glance-api --config-file=/etc/glance/glance-api.conf
"
logfile /opt/stack/logs/g-api.log.2016-03-31-183313
log on
screen -t n-api bash
stuff "/usr/local/bin/nova-api
"
logfile /opt/stack/logs/n-api.log.2016-03-31-183313
log on
screen -t n-cond bash
stuff "/usr/local/bin/nova-conductor --config-file /etc/nova/nova.conf
"
logfile /opt/stack/logs/n-cond.log.2016-03-31-183313
log on
screen -t n-net bash
stuff "/usr/local/bin/nova-network --config-file /etc/nova/nova.conf
"
logfile /opt/stack/logs/n-net.log.2016-03-31-183313
log on
screen -t n-sch bash
stuff "/usr/local/bin/nova-scheduler --config-file /etc/nova/nova.conf
"
logfile /opt/stack/logs/n-sch.log.2016-03-31-183313
log on
screen -t n-novnc bash
stuff "/usr/local/bin/nova-novncproxy --config-file /etc/nova/nova.conf --web /opt/stack/noVNC
"
logfile /opt/stack/logs/n-novnc.log.2016-03-31-183313
log on
screen -t n-cauth bash
stuff "/usr/local/bin/nova-consoleauth --config-file /etc/nova/nova.conf
"
logfile /opt/stack/logs/n-cauth.log.2016-03-31-183313
log on
screen -t n-cpu bash
stuff "sg libvirtd '/usr/local/bin/nova-compute --config-file /etc/nova/nova.conf'
"
logfile /opt/stack/logs/n-cpu.log.2016-03-31-183313
log on
screen -t c-api bash
stuff "/usr/local/bin/cinder-api --config-file /etc/cinder/cinder.conf
"
logfile /opt/stack/logs/c-api.log.2016-03-31-183313
log on
screen -t c-sch bash
stuff "/usr/local/bin/cinder-scheduler --config-file /etc/cinder/cinder.conf
"
logfile /opt/stack/logs/c-sch.log.2016-03-31-183313
log on
screen -t c-vol bash
stuff "/usr/local/bin/cinder-volume --config-file /etc/cinder/cinder.conf
"
logfile /opt/stack/logs/c-vol.log.2016-03-31-183313
log on
screen -t horizon bash
stuff "sudo tail -f /var/log/apache2/horizon_error.log
"
logfile /opt/stack/logs/horizon.log.2016-03-31-183313
log on
显然,这个文件里面的才是真正执行的代码,代码逻辑也很简单,就是逐个设置session title并开启服务。