ceph启动脚本
放在/etc/init.d/目录下,用法如下:
root@u253:~# /etc/init.d/ceph
=== mon.a ===
usage: /etc/init.d/ceph [options] {start|stop|restart} [mon|osd|mds]...
-c ceph.conf
--valgrind run via valgrind
--hostname [hostname] override hostname lookup
源码如下:
文件名:ceph
#!/bin/sh
# Start/stop ceph daemons
# chkconfig: ### BEGIN INIT INFO
# Provides: ceph
# Default-Start:
# Default-Stop:
# Required-Start: $remote_fs $named $network $time
# Required-Stop: $remote_fs $named $network $time
# Short-Description: Start Ceph distributed file system daemons at boot time
# Description: Enable Ceph distributed file system services.
### END INIT INFO # if we start up as ./mkcephfs, assume everything else is in the
# current directory too.
if [ `dirname $` = "." ] && [ $PWD != "/etc/init.d" ]; then
BINDIR=.
LIBDIR=.
ETCDIR=.
else
BINDIR=/usr/bin
LIBDIR=/usr/lib/ceph
ETCDIR=/etc/ceph
fi usage_exit() {
echo "usage: $0 [options] {start|stop|restart} [mon|osd|mds]..."
printf "\t-c ceph.conf\n"
printf "\t--valgrind\trun via valgrind\n"
printf "\t--hostname [hostname]\toverride hostname lookup\n"
exit
} . $LIBDIR/ceph_common.sh EXIT_STATUS= signal_daemon() {
name=$
daemon=$
pidfile=$
signal=$
action=$
[ -z "$action" ] && action="Stopping"
echo -n "$action Ceph $name on $host..."
do_cmd "if [ -e $pidfile ]; then
pid=`cat $pidfile`
if [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline ; then
cmd=\"kill $signal \$pid\"
echo -n \$cmd...
\$cmd
fi
fi"
echo done
} daemon_is_running() {
name=$
daemon=$
daemon_id=$
pidfile=$
do_cmd "[ -e $pidfile ] || exit 1 # no pid, presumably not running
pid=\`cat $pidfile\`
[ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline && grep -qwe -i.$daemon_id /proc/\$pid/cmdline && exit # running
exit # pid is something else" "" "okfail"
} stop_daemon() {
name=$
daemon=$
pidfile=$
signal=$
action=$
[ -z "$action" ] && action="Stopping"
echo -n "$action Ceph $name on $host..."
do_cmd "while [ 1 ]; do
[ -e $pidfile ] || break
pid=\`cat $pidfile\`
while [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline ; do
cmd=\"kill $signal \$pid\"
echo -n \$cmd...
\$cmd
sleep
continue
done
break
done"
echo done
} ## command line options
options= version=
dovalgrind=
docrun=
allhosts=
debug=
monaddr=
dobtrfs=
dobtrfsumount=
verbose= while echo $ | grep -q '^-'; do # FIXME: why not '^-'?
case $ in
-v | --verbose)
verbose=
;;
--valgrind)
dovalgrind=
;;
--novalgrind)
dovalgrind=
;;
--allhosts | -a)
allhosts=;
;;
--restart)
docrun=
;;
--norestart)
docrun=
;;
-m )
[ -z "$2" ] && usage_exit
options="$options $1"
shift
MON_ADDR=$
;;
--btrfs)
dobtrfs=
;;
--nobtrfs)
dobtrfs=
;;
--btrfsumount)
dobtrfsumount=
;;
--conf | -c)
[ -z "$2" ] && usage_exit
options="$options $1"
shift
conf=$
;;
--hostname )
[ -z "$2" ] && usage_exit
options="$options $1"
shift
hostname=$
;;
*)
echo unrecognized option \'$1\'
usage_exit
;;
esac
options="$options $1"
shift
done verify_conf command=$
[ -n "$*" ] && shift get_name_list "$@" for name in $what; do
type=`echo $name | cut -c -` # e.g. 'mon', if $item is 'mon1'
id=`echo $name | cut -c - | sed 's/^\\.//'`
num=$id
name="$type.$id" get_conf auto_start "" "auto start"
if [ -z "$@" ] || [ "$@" = "mds" ]; then
if [ "$auto_start" = "no" ] || [ "$auto_start" = "false" ] || [ "$auto_start" = "" ]; then
continue
fi
fi check_host || continue get_conf pid_file "/var/run/ceph/$type.$id.pid" "pid file"
[ -n "$pid_file" ] && do_cmd "mkdir -p "`dirname $pid_file` get_conf log_dir "" "log dir"
get_conf log_sym_dir "" "log sym dir"
[ -n "$log_dir" ] && do_cmd "mkdir -p $log_dir"
[ -n "$log_sym_dir" ] && do_cmd "mkdir -p $log_sym_dir" # start, and already running? (do this check early to avoid unnecessary work!)
if [ "$command" = "start" ]; then
if daemon_is_running $name ceph-$type $id $pid_file; then
echo "Starting Ceph $name on $host...already running"
continue
fi
fi # binary?
binary="$BINDIR/ceph-$type"
if [ "$command" = "start" ]; then
get_conf copy_executable_to "" "copy executable to"
if [ -n "$copy_executable_to" ]; then
scp $binary "$host:$copy_executable_to"
binary="$copy_executable_to"
fi
fi cmd="$binary -i $id" # conf file
if [ "$host" = "$hostname" ]; then
cur_conf=$conf
else
if echo $pushed_to | grep -v -q " $host "; then
scp -q $conf $host:/tmp/ceph.conf.$$
pushed_to="$pushed_to $host "
fi
cur_conf="/tmp/ceph.conf.$$"
fi
cmd="$cmd -c $cur_conf" if echo $name | grep -q ^osd; then
get_conf osd_data "" "osd data"
get_conf btrfs_path "$osd_data" "btrfs path" # mount point defaults so osd data
get_conf btrfs_devs "" "btrfs devs"
first_dev=`echo $btrfs_devs | cut '-d ' -f `
fi # do lockfile, if RH
get_conf lockfile "/var/lock/subsys/ceph" "lock file"
lockdir=`dirname $lockfile`
if [ ! -d "$lockdir" ]; then
lockfile=""
fi case "$command" in
start)
# Increase max_open_files, if the configuration calls for it.
get_conf max_open_files "" "max open files"
if [ $max_open_files != "" ]; then
# Note: Don't try to do math with these numbers, because POSIX shells
# can't do 64-bit math (natively). Just treat them as strings.
cur=`ulimit -n`
if [ "x$max_open_files" != "x$cur" ]; then
ulimit -n $max_open_files
fi
fi # build final command
wrap=""
runmode=""
runarg="" [ -z "$crun" ] && get_conf_bool crun "" "restart on core dump"
[ "$crun" -eq ] && wrap="$BINDIR/ceph-run" [ -z "$dovalgrind" ] && get_conf_bool valgrind "" "valgrind"
[ -n "$valgrind" ] && wrap="$wrap valgrind $valgrind" [ -n "$wrap" ] && runmode="-f &" && runarg="-f" cmd="$wrap $cmd $runmode" if [ $dobtrfs -eq ] && [ -n "$btrfs_devs" ]; then
get_conf pre_mount "true" "pre mount command"
get_conf btrfs_opt "noatime" "btrfs options"
[ -n "$btrfs_opt" ] && btrfs_opt="-o $btrfs_opt"
[ -n "$pre_mount" ] && do_cmd "$pre_mount"
echo Mounting Btrfs on $host:$btrfs_path
do_root_cmd "modprobe btrfs ; btrfsctl -a ; egrep -q '^[^ ]+ $btrfs_path' /proc/mounts || mount -t btrfs $btrfs_opt $first_dev $btrfs_path"
fi
echo Starting Ceph $name on $host...
get_conf pre_start_eval "" "pre start eval"
[ -n "$pre_start_eval" ] && $pre_start_eval
get_conf pre_start "" "pre start command"
get_conf post_start "" "post start command"
[ -n "$pre_start" ] && do_cmd "$pre_start"
do_cmd "$cmd" $runarg
[ -n "$post_start" ] && do_cmd "$post_start"
[ -n "$lockfile" ] && [ "$?" -eq ] && touch $lockfile
;; stop)
get_conf pre_stop "" "pre stop command"
get_conf post_stop "" "post stop command"
[ -n "$pre_stop" ] && do_cmd "$pre_stop"
stop_daemon $name ceph-$type $pid_file
[ -n "$post_stop" ] && do_cmd "$post_stop"
[ -n "$lockfile" ] && [ "$?" -eq ] && rm -f $lockfile
if [ $dobtrfsumount -eq ] && [ -n "$btrfs_devs" ]; then
echo Unmounting Btrfs on $host:$btrfs_path
do_root_cmd "umount $btrfs_path || true"
fi
;; status)
if daemon_is_running $name ceph-$type $id $pid_file; then
echo "$name: running..."
elif [ -e "$pid_file" ]; then
# daemon is dead, but pid file still exists
echo "$name: dead."
EXIT_STATUS=
else
# daemon is dead, and pid file is gone
echo "$name: not running."
EXIT_STATUS=
fi
;; ssh)
$ssh
;; forcestop)
get_conf pre_forcestop "" "pre forcestop command"
get_conf post_forcestop "" "post forcestop command"
[ -n "$pre_forcestop" ] && do_cmd "$pre_forcestop"
stop_daemon $name ceph-$type $pid_file -
[ -n "$post_forcestop" ] && do_cmd "$post_forcestop"
[ -n "$lockfile" ] && [ "$?" -eq ] && rm -f $lockfile
;; killall)
echo "killall ceph-$type on $host"
do_cmd "pkill ^ceph-$type || true"
[ -n "$lockfile" ] && [ "$?" -eq ] && rm -f $lockfile
;; force-reload | reload)
signal_daemon $name ceph-$type $pid_file - "Reloading"
;; restart)
$ $options stop $name
$ $options start $name
;; cleanlogs)
echo removing logs
if [ -n "$log_sym_dir" ]; then
do_cmd "for f in $log_sym_dir/$type.$id.*; do rm -f \`readlink \$f\` ; rm -f \$f ; done ; rm -f $log_dir/$type.$id.*"
fi
[ -n "$log_dir" ] && do_cmd "rm -f $log_dir/$type.$id.*"
;; cleanalllogs)
echo removing all logs
[ -n "$log_sym_dir" ] && do_cmd "rm -f $log_sym_dir/* || true"
[ -n "$log_dir" ] && do_cmd "rm -f $log_dir/* || true"
;; *)
usage_exit
;;
esac
done exit $EXIT_STATUS
ceph启动脚本的更多相关文章
- logstash服务启动脚本
logstash服务启动脚本 最近在弄ELK,发现logstash没有sysv类型的服务启动脚本,于是按照网上一个老外提供的模板自己进行修改 #添加用户 useradd logstash -M -s ...
- 改进uwsgi启动脚本,使其支持多个独立配置文件
最近在研究flask,在架设运行环境的时候犯了难.因为我想把每个独立的应用像NGINX处理多个网站那样,每个应用单独一个配置文件.而网上流传的uwsgi启动脚本都只支持单个配置文件.虽然有文章说可以把 ...
- linux nginx 启动脚本
linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...
- busybox rootfs 启动脚本分析(二)
上次分析了busybox的启动脚本,这次分析一下init.d中一些脚本的内容. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6169678.html h ...
- Tomcat启动脚本
记录一个比较好的tomcat启动脚本,截取<OneinStack>,修改如下两个参数即可用. 使用之前修改下面2个参数: #Location of JAVA_HOME (bin files ...
- Linux Runlevel 启动 脚本
Linux 操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做 Runlevel,同样,当Linux操作系统关闭时也要经历另外几个不同的 Runlevel,下面详细介绍一下 Run ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat
概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...
- 关于Ubuntu运行级别、开机启动脚本的说明
关于Ubuntu运行级别.开机启动脚本的说明 目录简介 1.1介绍Ubuntu下面的自启动脚本目录 1.2 Linux操作系统运行级别的概念 1.3关于操作系统自启脚本的启动顺序 1.4 Lin ...
随机推荐
- Makefile写法
概述 -- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- JQ中$(document.ready())
js中window.onload与jquery中$(document.ready())的区别 <html> <head> <script type='text/javas ...
- DLR、ASTER GDEM、SRTM3、GMTED2010等5种全球高程数据对比
目前网上有多种全球高程数据,国内在这方面也进步喜人,资源三号目前已放出来的卫片给了不少惊喜,其高程数值得期待.但资源三号的高程数据放出来还需等待,过去两三年全球高程数据发展相当迅猛,DLR放出了相 ...
- elk之nginx
elk之nginx: ignore_older => 86400,不处理一天以前的文件. zjtest7-frontend:/usr/local/logstash-2.3.4/config# c ...
- 柯南君:看大数据时代下的IT架构(7)消息队列之RabbitMQ--案例(routing 起航)
二.Routing(路由) (using the Java client) 在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只 ...
- cygwin在Windows8.1中设置ssh的问题解决
为了在Windows 8.1上直接使用Linux环境和hadoop开发,装了cygwin,同时设置ssh无密码登录. 但正常ssh-keygen后复制到authorised_keys后登录出现提示 ...
- 达内TTS6.0课件oop_day04
- 为什么没有好用的Android游戏引擎?
随着Android平台的不断发展,最近Android开发人员数量呈现出上升势头,就连以往较为冷门的游戏开发领域也涌现出不少生力军.然而,全新的问题正摆在了刚開始学习的人面前,非常多他们从未遇过的问题開 ...
- Objective-C 类属性和方法的訪问权限
OC中提供了4种訪问权限.@private, @public, @protected这三种和其它的C++, Java是一样的,@package这个訪问权限并非Java里的包訪问权限,OC中没有包的概念 ...
- 快速定位MS Sql Server 数据库死锁进程
最近在做一个大型项目,由于数据设计采用离散型数据库设计,以方便需求变更及用户自定义流程要素,因为要素用户自定义,数据完整性靠代码约束变得不太现实,只能依靠表间关系来约束,结果因此导致数据的操作经常产生 ...