放在/etc/init.d/目录下,用法如下:

  1. root@u253:~# /etc/init.d/ceph
  2. === mon.a ===
  3. usage: /etc/init.d/ceph [options] {start|stop|restart} [mon|osd|mds]...
  4. -c ceph.conf
  5. --valgrind run via valgrind
  6. --hostname [hostname] override hostname lookup

源码如下:

  1. 文件名:ceph
  2. #!/bin/sh
  3. # Start/stop ceph daemons
  4. # chkconfig:
  5.  
  6. ### BEGIN INIT INFO
  7. # Provides: ceph
  8. # Default-Start:
  9. # Default-Stop:
  10. # Required-Start: $remote_fs $named $network $time
  11. # Required-Stop: $remote_fs $named $network $time
  12. # Short-Description: Start Ceph distributed file system daemons at boot time
  13. # Description: Enable Ceph distributed file system services.
  14. ### END INIT INFO
  15.  
  16. # if we start up as ./mkcephfs, assume everything else is in the
  17. # current directory too.
  18. if [ `dirname $` = "." ] && [ $PWD != "/etc/init.d" ]; then
  19. BINDIR=.
  20. LIBDIR=.
  21. ETCDIR=.
  22. else
  23. BINDIR=/usr/bin
  24. LIBDIR=/usr/lib/ceph
  25. ETCDIR=/etc/ceph
  26. fi
  27.  
  28. usage_exit() {
  29. echo "usage: $0 [options] {start|stop|restart} [mon|osd|mds]..."
  30. printf "\t-c ceph.conf\n"
  31. printf "\t--valgrind\trun via valgrind\n"
  32. printf "\t--hostname [hostname]\toverride hostname lookup\n"
  33. exit
  34. }
  35.  
  36. . $LIBDIR/ceph_common.sh
  37.  
  38. EXIT_STATUS=
  39.  
  40. signal_daemon() {
  41. name=$
  42. daemon=$
  43. pidfile=$
  44. signal=$
  45. action=$
  46. [ -z "$action" ] && action="Stopping"
  47. echo -n "$action Ceph $name on $host..."
  48. do_cmd "if [ -e $pidfile ]; then
  49. pid=`cat $pidfile`
  50. if [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline ; then
  51. cmd=\"kill $signal \$pid\"
  52. echo -n \$cmd...
  53. \$cmd
  54. fi
  55. fi"
  56. echo done
  57. }
  58.  
  59. daemon_is_running() {
  60. name=$
  61. daemon=$
  62. daemon_id=$
  63. pidfile=$
  64. do_cmd "[ -e $pidfile ] || exit 1 # no pid, presumably not running
  65. pid=\`cat $pidfile\`
  66. [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline && grep -qwe -i.$daemon_id /proc/\$pid/cmdline && exit # running
  67. exit # pid is something else" "" "okfail"
  68. }
  69.  
  70. stop_daemon() {
  71. name=$
  72. daemon=$
  73. pidfile=$
  74. signal=$
  75. action=$
  76. [ -z "$action" ] && action="Stopping"
  77. echo -n "$action Ceph $name on $host..."
  78. do_cmd "while [ 1 ]; do
  79. [ -e $pidfile ] || break
  80. pid=\`cat $pidfile\`
  81. while [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline ; do
  82. cmd=\"kill $signal \$pid\"
  83. echo -n \$cmd...
  84. \$cmd
  85. sleep
  86. continue
  87. done
  88. break
  89. done"
  90. echo done
  91. }
  92.  
  93. ## command line options
  94. options=
  95.  
  96. version=
  97. dovalgrind=
  98. docrun=
  99. allhosts=
  100. debug=
  101. monaddr=
  102. dobtrfs=
  103. dobtrfsumount=
  104. verbose=
  105.  
  106. while echo $ | grep -q '^-'; do # FIXME: why not '^-'?
  107. case $ in
  108. -v | --verbose)
  109. verbose=
  110. ;;
  111. --valgrind)
  112. dovalgrind=
  113. ;;
  114. --novalgrind)
  115. dovalgrind=
  116. ;;
  117. --allhosts | -a)
  118. allhosts=;
  119. ;;
  120. --restart)
  121. docrun=
  122. ;;
  123. --norestart)
  124. docrun=
  125. ;;
  126. -m )
  127. [ -z "$2" ] && usage_exit
  128. options="$options $1"
  129. shift
  130. MON_ADDR=$
  131. ;;
  132. --btrfs)
  133. dobtrfs=
  134. ;;
  135. --nobtrfs)
  136. dobtrfs=
  137. ;;
  138. --btrfsumount)
  139. dobtrfsumount=
  140. ;;
  141. --conf | -c)
  142. [ -z "$2" ] && usage_exit
  143. options="$options $1"
  144. shift
  145. conf=$
  146. ;;
  147. --hostname )
  148. [ -z "$2" ] && usage_exit
  149. options="$options $1"
  150. shift
  151. hostname=$
  152. ;;
  153. *)
  154. echo unrecognized option \'$1\'
  155. usage_exit
  156. ;;
  157. esac
  158. options="$options $1"
  159. shift
  160. done
  161.  
  162. verify_conf
  163.  
  164. command=$
  165. [ -n "$*" ] && shift
  166.  
  167. get_name_list "$@"
  168.  
  169. for name in $what; do
  170. type=`echo $name | cut -c -` # e.g. 'mon', if $item is 'mon1'
  171. id=`echo $name | cut -c - | sed 's/^\\.//'`
  172. num=$id
  173. name="$type.$id"
  174.  
  175. get_conf auto_start "" "auto start"
  176. if [ -z "$@" ] || [ "$@" = "mds" ]; then
  177. if [ "$auto_start" = "no" ] || [ "$auto_start" = "false" ] || [ "$auto_start" = "" ]; then
  178. continue
  179. fi
  180. fi
  181.  
  182. check_host || continue
  183.  
  184. get_conf pid_file "/var/run/ceph/$type.$id.pid" "pid file"
  185. [ -n "$pid_file" ] && do_cmd "mkdir -p "`dirname $pid_file`
  186.  
  187. get_conf log_dir "" "log dir"
  188. get_conf log_sym_dir "" "log sym dir"
  189. [ -n "$log_dir" ] && do_cmd "mkdir -p $log_dir"
  190. [ -n "$log_sym_dir" ] && do_cmd "mkdir -p $log_sym_dir"
  191.  
  192. # start, and already running? (do this check early to avoid unnecessary work!)
  193. if [ "$command" = "start" ]; then
  194. if daemon_is_running $name ceph-$type $id $pid_file; then
  195. echo "Starting Ceph $name on $host...already running"
  196. continue
  197. fi
  198. fi
  199.  
  200. # binary?
  201. binary="$BINDIR/ceph-$type"
  202. if [ "$command" = "start" ]; then
  203. get_conf copy_executable_to "" "copy executable to"
  204. if [ -n "$copy_executable_to" ]; then
  205. scp $binary "$host:$copy_executable_to"
  206. binary="$copy_executable_to"
  207. fi
  208. fi
  209.  
  210. cmd="$binary -i $id"
  211.  
  212. # conf file
  213. if [ "$host" = "$hostname" ]; then
  214. cur_conf=$conf
  215. else
  216. if echo $pushed_to | grep -v -q " $host "; then
  217. scp -q $conf $host:/tmp/ceph.conf.$$
  218. pushed_to="$pushed_to $host "
  219. fi
  220. cur_conf="/tmp/ceph.conf.$$"
  221. fi
  222. cmd="$cmd -c $cur_conf"
  223.  
  224. if echo $name | grep -q ^osd; then
  225. get_conf osd_data "" "osd data"
  226. get_conf btrfs_path "$osd_data" "btrfs path" # mount point defaults so osd data
  227. get_conf btrfs_devs "" "btrfs devs"
  228. first_dev=`echo $btrfs_devs | cut '-d ' -f `
  229. fi
  230.  
  231. # do lockfile, if RH
  232. get_conf lockfile "/var/lock/subsys/ceph" "lock file"
  233. lockdir=`dirname $lockfile`
  234. if [ ! -d "$lockdir" ]; then
  235. lockfile=""
  236. fi
  237.  
  238. case "$command" in
  239. start)
  240. # Increase max_open_files, if the configuration calls for it.
  241. get_conf max_open_files "" "max open files"
  242. if [ $max_open_files != "" ]; then
  243. # Note: Don't try to do math with these numbers, because POSIX shells
  244. # can't do 64-bit math (natively). Just treat them as strings.
  245. cur=`ulimit -n`
  246. if [ "x$max_open_files" != "x$cur" ]; then
  247. ulimit -n $max_open_files
  248. fi
  249. fi
  250.  
  251. # build final command
  252. wrap=""
  253. runmode=""
  254. runarg=""
  255.  
  256. [ -z "$crun" ] && get_conf_bool crun "" "restart on core dump"
  257. [ "$crun" -eq ] && wrap="$BINDIR/ceph-run"
  258.  
  259. [ -z "$dovalgrind" ] && get_conf_bool valgrind "" "valgrind"
  260. [ -n "$valgrind" ] && wrap="$wrap valgrind $valgrind"
  261.  
  262. [ -n "$wrap" ] && runmode="-f &" && runarg="-f"
  263.  
  264. cmd="$wrap $cmd $runmode"
  265.  
  266. if [ $dobtrfs -eq ] && [ -n "$btrfs_devs" ]; then
  267. get_conf pre_mount "true" "pre mount command"
  268. get_conf btrfs_opt "noatime" "btrfs options"
  269. [ -n "$btrfs_opt" ] && btrfs_opt="-o $btrfs_opt"
  270. [ -n "$pre_mount" ] && do_cmd "$pre_mount"
  271. echo Mounting Btrfs on $host:$btrfs_path
  272. do_root_cmd "modprobe btrfs ; btrfsctl -a ; egrep -q '^[^ ]+ $btrfs_path' /proc/mounts || mount -t btrfs $btrfs_opt $first_dev $btrfs_path"
  273. fi
  274. echo Starting Ceph $name on $host...
  275. get_conf pre_start_eval "" "pre start eval"
  276. [ -n "$pre_start_eval" ] && $pre_start_eval
  277. get_conf pre_start "" "pre start command"
  278. get_conf post_start "" "post start command"
  279. [ -n "$pre_start" ] && do_cmd "$pre_start"
  280. do_cmd "$cmd" $runarg
  281. [ -n "$post_start" ] && do_cmd "$post_start"
  282. [ -n "$lockfile" ] && [ "$?" -eq ] && touch $lockfile
  283. ;;
  284.  
  285. stop)
  286. get_conf pre_stop "" "pre stop command"
  287. get_conf post_stop "" "post stop command"
  288. [ -n "$pre_stop" ] && do_cmd "$pre_stop"
  289. stop_daemon $name ceph-$type $pid_file
  290. [ -n "$post_stop" ] && do_cmd "$post_stop"
  291. [ -n "$lockfile" ] && [ "$?" -eq ] && rm -f $lockfile
  292. if [ $dobtrfsumount -eq ] && [ -n "$btrfs_devs" ]; then
  293. echo Unmounting Btrfs on $host:$btrfs_path
  294. do_root_cmd "umount $btrfs_path || true"
  295. fi
  296. ;;
  297.  
  298. status)
  299. if daemon_is_running $name ceph-$type $id $pid_file; then
  300. echo "$name: running..."
  301. elif [ -e "$pid_file" ]; then
  302. # daemon is dead, but pid file still exists
  303. echo "$name: dead."
  304. EXIT_STATUS=
  305. else
  306. # daemon is dead, and pid file is gone
  307. echo "$name: not running."
  308. EXIT_STATUS=
  309. fi
  310. ;;
  311.  
  312. ssh)
  313. $ssh
  314. ;;
  315.  
  316. forcestop)
  317. get_conf pre_forcestop "" "pre forcestop command"
  318. get_conf post_forcestop "" "post forcestop command"
  319. [ -n "$pre_forcestop" ] && do_cmd "$pre_forcestop"
  320. stop_daemon $name ceph-$type $pid_file -
  321. [ -n "$post_forcestop" ] && do_cmd "$post_forcestop"
  322. [ -n "$lockfile" ] && [ "$?" -eq ] && rm -f $lockfile
  323. ;;
  324.  
  325. killall)
  326. echo "killall ceph-$type on $host"
  327. do_cmd "pkill ^ceph-$type || true"
  328. [ -n "$lockfile" ] && [ "$?" -eq ] && rm -f $lockfile
  329. ;;
  330.  
  331. force-reload | reload)
  332. signal_daemon $name ceph-$type $pid_file - "Reloading"
  333. ;;
  334.  
  335. restart)
  336. $ $options stop $name
  337. $ $options start $name
  338. ;;
  339.  
  340. cleanlogs)
  341. echo removing logs
  342. if [ -n "$log_sym_dir" ]; then
  343. 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.*"
  344. fi
  345. [ -n "$log_dir" ] && do_cmd "rm -f $log_dir/$type.$id.*"
  346. ;;
  347.  
  348. cleanalllogs)
  349. echo removing all logs
  350. [ -n "$log_sym_dir" ] && do_cmd "rm -f $log_sym_dir/* || true"
  351. [ -n "$log_dir" ] && do_cmd "rm -f $log_dir/* || true"
  352. ;;
  353.  
  354. *)
  355. usage_exit
  356. ;;
  357. esac
  358. done
  359.  
  360. 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):010-Regular Expression Matching

    题目来源: https://leetcode.com/problems/regular-expression-matching/ 题意分析: 这道题目定义了两个正则表达式规则.’.’代表任意字符,’* ...

  2. J2SE知识点摘记(十五)

    1.        字节流和字符流的转换 以字符为导向的stream基本上有与之相对应的以字节为导向的Stream,两个对应类实现的功能相同,只是操作时的导向不同 字节输入流转换为字符输入流: Inp ...

  3. Android应用中使用自定义文字

    在Android系统中可以很方便的修改字体样式.系统提供了三种样式,分别是sans,serif,monospace.可以在xml布局文件中通过 android:typeface="[sans ...

  4. TF卡速度测试对比 Class数越高速度越快

    存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...

  5. firemonkey打开子窗体

    procedure TForm1.Button1Click(Sender: TObject);varChildForm: TForm2;beginChildForm := TForm2.Create( ...

  6. Swift语言iOS8的蓝牙Bluetooth解析

    开发中央步骤: 1.添加CoreBluetooth.framework框架到你的工程 2.继承两个协议:CBCentralManagerDelegate和CBPeripheralDelegate 个人 ...

  7. C#Excel导出导入

    using System; using System.Collections.Generic; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using ...

  8. English - 定冠词和不定冠词(a an the) 的区别

    不定冠词表示泛指,定冠词表示特指. 不定冠词a (an)与数词one 同源,是"一个"的意思.a用于辅音音素前,一般读作[e],而an则用于元音音素前,一般读做[en]. 1) 表 ...

  9. MySQL 5.7 重置root默认密码

    http://www.cnblogs.com/jym-sunshine/p/5314101.html mysql5.7.11修改root默认密码   知道 MySQL 出了5.7了,并且网上说性能提高 ...

  10. hdu4099

    要想通这个题目应该很容易,由于斐波纳契数在近100项之后很大,早就超出long long了.而输入最长的序列才40个数字,所以大约保留前50位,前40位是没有误差的!!!其实,想想我们判断double ...