summaryrefslogtreecommitdiff
path: root/src/init-ceph.in
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-07-13 10:30:43 -0700
committerSage Weil <sage@newdream.net>2009-07-13 10:30:43 -0700
commit5bb296898591f6c3e7cced169b5c7e1d95669d20 (patch)
treee04fbffbf79f092a2c893e7429eefe62064b9ee9 /src/init-ceph.in
parent08a6fb733d9cebc884dc18692c6b1cd070fdcad4 (diff)
downloadceph-5bb296898591f6c3e7cced169b5c7e1d95669d20.tar.gz
initscripts: substitute in proper autoconf paths
Based on http://www.gnu.org/software/hello/manual/autoconf/Installation-Directory-Variables.html
Diffstat (limited to 'src/init-ceph.in')
-rw-r--r--src/init-ceph.in238
1 files changed, 238 insertions, 0 deletions
diff --git a/src/init-ceph.in b/src/init-ceph.in
new file mode 100644
index 00000000000..3218726f921
--- /dev/null
+++ b/src/init-ceph.in
@@ -0,0 +1,238 @@
+#!/bin/sh
+# Start/stop ceph daemons
+
+### BEGIN INIT INFO
+# Provides: ceph
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Required-Start: $local_fs $named $network $time
+# Required-Stop: $local_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 $0` = "." ] && [ $PWD != "/etc/init.d" ]; then
+ BINDIR=.
+ LIBDIR=.
+ ETCDIR=.
+else
+ BINDIR=@bindir@
+ LIBDIR=@libdir@/ceph
+ ETCDIR=@sysconfdir@/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"
+ exit
+}
+
+. $LIBDIR/ceph_common.sh
+
+
+stop_daemon() {
+ name=$1
+ daemon=$2
+ pidfile=$3
+ signal=$4
+ action=$5
+ [ -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 1
+ continue
+ done
+ break
+ done"
+ echo done
+}
+
+## command line options
+options=
+
+version=0
+dovalgrind=
+docrun=
+allhosts=0
+debug=0
+monaddr=
+dobtrfs=1
+verbose=0
+
+while echo $1 | grep -q '^-'; do # FIXME: why not '^-'?
+case $1 in
+ -v | --verbose)
+ verbose=1
+ ;;
+ --valgrind)
+ dovalgrind=1
+ ;;
+ --novalgrind)
+ dovalgrind=0
+ ;;
+ --allhosts | -a)
+ allhosts=1;
+ ;;
+ --restart)
+ docrun=1
+ ;;
+ --norestart)
+ docrun=0
+ ;;
+ -m )
+ [ "$2" == "" ] && usage_exit
+ options="$options $1"
+ shift
+ MON_ADDR=$1
+ ;;
+ --btrfs)
+ dobtrfs=1
+ ;;
+ --nobtrfs)
+ dobtrfs=0
+ ;;
+ --conf | -c)
+ [ "$2" == "" ] && usage_exit
+ options="$options $1"
+ shift
+ conf=$1
+ ;;
+ *)
+ echo unrecognized option \'$1\'
+ usage_exit
+ ;;
+esac
+options="$options $1"
+shift
+done
+
+verify_conf
+
+command=$1
+shift
+
+get_name_list "$@"
+
+for name in $what; do
+ type=`echo $name | cut -c 1-3` # e.g. 'mon', if $item is 'mon1'
+ id=`echo $name | cut -c 4- | sed 's/\\.//'`
+ num=$id
+
+ check_host || continue
+
+ cmd="$BINDIR/c$type -i $id"
+
+ # conf file
+ if [ "$host" = "$hostname" ]; then
+ cmd="$cmd -c $conf"
+ else
+ if echo $pushed_to | grep -v -q " $host "; then
+ scp -q $conf $host:/tmp/ceph.conf.$$
+ pushed_to="$pushed_to $host "
+ fi
+ cmd="$cmd -c /tmp/ceph.conf.$$"
+ fi
+
+ 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 1`
+ fi
+
+ get_conf pid_file "" "pid file"
+
+ case "$command" in
+ start)
+ # build final command
+ wrap=""
+ runmode=""
+ runarg=""
+
+ [ -z "$crun" ] && get_conf_bool crun "0" "restart on core dump"
+ [ "$crun" -eq 1 ] && wrap="$BINDIR/crun"
+
+ [ -z "$dovalgrind" ] && get_conf_bool valgrind "" "valgrind"
+ [ -n "$valgrind" ] && wrap="$wrap valgrind $valgrind"
+
+ [ -n "$wrap" ] && runmode="-f &" && runarg="-f"
+
+ cmd="$wrap $cmd $runmode"
+
+ echo Starting ceph $name on $host...
+ if [ $dobtrfs -eq 1 ] && [ -n "$btrfs_devs" ]; then
+ get_conf pre_mount "true" "pre mount command"
+ get_conf btrfs_opt "flushoncommit" "btrfs options"
+ [ -n "$btrfs_opt" ] && btrfs_opt="-o $btrfs_opt"
+ [ -n "$pre_mount" ] && do_cmd $pre_mount
+ do_root_cmd "modprobe btrfs ; btrfsctl -a ; egrep -q '^[^ ]+ $btrfs_path' /proc/mounts || mount -t btrfs $btrfs_opt $first_dev $btrfs_path"
+ fi
+ 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
+ ;;
+
+ 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 c$type $pid_file
+ [ -n "$post_stop" ] && do_cmd $post_stop
+ ;;
+
+ 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 c$type $pid_file -9
+ [ -n "$post_forcestop" ] && do_cmd $post_forcestop
+ ;;
+
+ killall)
+ echo "killall c$type on $host"
+ do_cmd "killall -9 c$type || true"
+ ;;
+
+ force-reload | reload)
+ stop_daemon $name c$type $pid_file -1 "Reloading"
+ ;;
+
+ restart)
+ $0 $options stop $name
+ $0 $options start $name
+ ;;
+
+ cleanlogs)
+ echo removing logs
+ get_conf log_dir "/var/log/ceph" "log dir"
+ get_conf log_sym_dir "/var/log/ceph" "log sym dir"
+ do_cmd "for f in $log_sym_dir/$name*; do rm -f \`readlink \$f\` ; rm -f \$f ; done"
+ ;;
+
+ cleanalllogs)
+ echo removing all logs
+ get_conf log_dir "/var/log/ceph" "log dir"
+ get_conf log_sym_dir "/var/log/ceph" "log sym dir"
+ do_cmd "rm -f $log_dir/* $log_sym_dir/* || true"
+ ;;
+
+ *)
+ usage_exit
+ ;;
+ esac
+done
+
+exit 0