放在/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: 2345 60 80 5 6 ### BEGIN INIT INFO 7 # Provides: ceph 8 # Default-Start: 2 3 5 9 # Default-Stop: 0 1 6 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 $0` = "." ] && [ $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=0 39 40 signal_daemon() { 41 name=$1 42 daemon=$2 43 pidfile=$3 44 signal=$4 45 action=$5 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=$1 61 daemon=$2 62 daemon_id=$3 63 pidfile=$4 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 0 # running 67 exit 1 # pid is something else" "" "okfail" 68 } 69 70 stop_daemon() { 71 name=$1 72 daemon=$2 73 pidfile=$3 74 signal=$4 75 action=$5 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 1 86 continue 87 done 88 break 89 done" 90 echo done 91 } 92 93 ## command line options 94 options= 95 96 version=0 97 dovalgrind= 98 docrun= 99 allhosts=0 100 debug=0 101 monaddr= 102 dobtrfs=1 103 dobtrfsumount=0 104 verbose=0 105 106 while echo $1 | grep -q '^-'; do # FIXME: why not '^-'? 107 case $1 in 108 -v | --verbose) 109 verbose=1 110 ;; 111 --valgrind) 112 dovalgrind=1 113 ;; 114 --novalgrind) 115 dovalgrind=0 116 ;; 117 --allhosts | -a) 118 allhosts=1; 119 ;; 120 --restart) 121 docrun=1 122 ;; 123 --norestart) 124 docrun=0 125 ;; 126 -m ) 127 [ -z "$2" ] && usage_exit 128 options="$options $1" 129 shift 130 MON_ADDR=$1 131 ;; 132 --btrfs) 133 dobtrfs=1 134 ;; 135 --nobtrfs) 136 dobtrfs=0 137 ;; 138 --btrfsumount) 139 dobtrfsumount=1 140 ;; 141 --conf | -c) 142 [ -z "$2" ] && usage_exit 143 options="$options $1" 144 shift 145 conf=$1 146 ;; 147 --hostname ) 148 [ -z "$2" ] && usage_exit 149 options="$options $1" 150 shift 151 hostname=$1 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=$1 165 [ -n "$*" ] && shift 166 167 get_name_list "$@" 168 169 for name in $what; do 170 type=`echo $name | cut -c 1-3` # e.g. 'mon', if $item is 'mon1' 171 id=`echo $name | cut -c 4- | 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" = "0" ]; 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 1` 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 "0" "max open files" 242 if [ $max_open_files != "0" ]; 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 "0" "restart on core dump" 257 [ "$crun" -eq 1 ] && 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 1 ] && [ -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 0 ] && 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 0 ] && rm -f $lockfile 292 if [ $dobtrfsumount -eq 1 ] && [ -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=1 305 else 306 # daemon is dead, and pid file is gone 307 echo "$name: not running." 308 EXIT_STATUS=3 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 -9 321 [ -n "$post_forcestop" ] && do_cmd "$post_forcestop" 322 [ -n "$lockfile" ] && [ "$?" -eq 0 ] && 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 0 ] && rm -f $lockfile 329 ;; 330 331 force-reload | reload) 332 signal_daemon $name ceph-$type $pid_file -1 "Reloading" 333 ;; 334 335 restart) 336 $0 $options stop $name 337 $0 $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