放在/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启动脚本的更多相关文章

  1. logstash服务启动脚本

    logstash服务启动脚本 最近在弄ELK,发现logstash没有sysv类型的服务启动脚本,于是按照网上一个老外提供的模板自己进行修改 #添加用户 useradd logstash -M -s ...

  2. 改进uwsgi启动脚本,使其支持多个独立配置文件

    最近在研究flask,在架设运行环境的时候犯了难.因为我想把每个独立的应用像NGINX处理多个网站那样,每个应用单独一个配置文件.而网上流传的uwsgi启动脚本都只支持单个配置文件.虽然有文章说可以把 ...

  3. linux nginx 启动脚本

    linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...

  4. busybox rootfs 启动脚本分析(二)

    上次分析了busybox的启动脚本,这次分析一下init.d中一些脚本的内容. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6169678.html h ...

  5. Tomcat启动脚本

    记录一个比较好的tomcat启动脚本,截取<OneinStack>,修改如下两个参数即可用. 使用之前修改下面2个参数: #Location of JAVA_HOME (bin files ...

  6. Linux Runlevel 启动 脚本

    Linux 操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做 Runlevel,同样,当Linux操作系统关闭时也要经历另外几个不同的 Runlevel,下面详细介绍一下 Run ...

  7. [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat

    概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...

  8. [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat

    概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...

  9. 关于Ubuntu运行级别、开机启动脚本的说明

    关于Ubuntu运行级别.开机启动脚本的说明 目录简介 1.1介绍Ubuntu下面的自启动脚本目录 1.2 Linux操作系统运行级别的概念 1.3关于操作系统自启脚本的启动顺序 1.4    Lin ...

随机推荐

  1. [LeetCode]题解(python):150-Evaluate Reverse Polish Notation

    题目来源: https://leetcode.com/problems/evaluate-reverse-polish-notation/ 题意分析: 给定一个数组,用这个数组来表示加减乘除,例如 [ ...

  2. jQuery Pagination Plugin ajax分页控件

    <html> <body> <div id="datagrid"> </div> <div id="paginati ...

  3. c++基础 之 面向对象特征一 : 继承

    class Base { public: void f() { cout<<"void f()"<<endl<<endl; } void f(i ...

  4. 程序猿的量化交易之路(20)--Cointrader之Assert实体(8)

    转载需说明出处:http://blog.csdn.net/minimicall, http://cloudtrade.top 不论什么可交易的都能够称之为Assert,资产.其类代码例如以下: pac ...

  5. JMS详细的工作原理【转】

    如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了.为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随 ...

  6. log4j 详解

      转载自:http://www.blogjava.net/hwpok/archive/2008/08/23/223891.html >>>>1. 概述<<< ...

  7. 利用mapreduce清洗日志内存不足问题

    package com.libc; import java.io.IOException; import java.io.UnsupportedEncodingException; import ja ...

  8. Filemanager 的使用

    filemanager的使用包括: 1.创建文件夹 2.删除文件夹 3.写入文件 4.复制文件 5.移动文件 6.删除文件​ 一.创建文件夹​ 首先宏的定义一个字符串作为地址的​来获取当前的docum ...

  9. jQuery 迭代器

    在 叶小钗 的博客中看到一段关于遍历的代码 var ajQuery = {}; function dir(elem, dir, until) { var matched = [], truncate ...

  10. Ubuntu下安装Mysql并使用

    一.在Ubuntu终端中输入 sudo apt-get install mysql-server 二.在安装中要设置root密码,自己输入即可,但必须要记住. 三.安装后可以使用命令检测是安装成功 s ...