summaryrefslogtreecommitdiffstats
path: root/src/init-radosgw
blob: fbb99081753bb6c939c42d1e47860fd82f344640 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#! /bin/sh
### BEGIN INIT INFO
# Provides:          radosgw
# Required-Start:    $remote_fs $named $network $time
# Required-Stop:     $remote_fs $named $network $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: radosgw RESTful rados gateway
# Description: radosgw RESTful rados gateway
### END INIT INFO

PATH=/sbin:/bin:/usr/bin

if [ -x /sbin/start-stop-daemon ]; then
    DEBIAN=1
    . /lib/lsb/init-functions
else
    . /etc/rc.d/init.d/functions
    DEBIAN=0
fi

daemon_is_running() {
    daemon=$1
    if pidof $daemon >/dev/null; then
        echo "$daemon is running."
        exit 0
    else
        echo "$daemon is not running."
        exit 1
    fi
}

VERBOSE=0
for opt in $*; do
    if [ "$opt" = "-v" ] || [ "$opt" = "--verbose" ]; then
       VERBOSE=1
    fi
done

# prefix for radosgw instances in ceph.conf
PREFIX='client.radosgw.'

# user to run radosgw as (if not specified in ceph.conf)
DEFAULT_USER='root'

RADOSGW=`which radosgw`
if [ ! -x "$RADOSGW" ]; then
    [ $VERBOSE -eq 1 ] && echo "$RADOSGW could not start, it is not executable."
    exit 1
fi

# list daemons, old-style and new-style
# NOTE: no support for cluster names that aren't "ceph"
dlist=`ceph-conf --list-sections $PREFIX`
if [ -d "/var/lib/ceph/radosgw" ]; then
    for d in `ls /var/lib/ceph/radosgw | grep ^ceph-`; do
	if [ -e "/var/lib/ceph/radosgw/$d/sysvinit" ]; then
	    id=`echo $d | cut -c 6-`
	    dlist="client.$id $dlist"
	fi
    done
fi

case "$1" in
    start)
        for name in $dlist
        do
            auto_start=`ceph-conf -n $name 'auto start'`
            if [ "$auto_start" = "no" ] || [ "$auto_start" = "false" ] || [ "$auto_start" = "0" ]; then
                continue
            fi

	    shortname=`echo $name | cut -c 8-`
	    if [ ! -e "/var/lib/ceph/radosgw/ceph-$shortname/sysvinit" ]; then
                # mapped to this host?
		host=`ceph-conf -n $name host`
		hostname=`hostname -s`
		if [ "$host" != "$hostname" ]; then
                    [ $VERBOSE -eq 1 ] && echo "hostname $hostname could not be found in ceph.conf:[$name], not starting."
                    continue
		fi
	    fi

            user=`ceph-conf -n $name user`
            if [ -z "$user" ]; then
                user="$DEFAULT_USER"
            fi

            log_file=`$RADOSGW -n $name --show-config-value log_file`
            if [ -n "$log_file" ]; then
                if [ ! -e "$log_file" ]; then
                    touch "$log_file"
                fi
                chown $user $log_file
            fi

            echo "Starting $name..."
            if [ $DEBIAN -eq 1 ]; then
                start-stop-daemon --start -u $user -x $RADOSGW -p /var/run/ceph/client-$name.pid -- -n $name
            else
                ulimit -n 32768
                core_limit=`ceph-conf -n $name 'core file limit'`
                if [ -z $core_limit ]; then
                    DAEMON_COREFILE_LIMIT=$core_limit
                fi
                daemon --user="$user" "$RADOSGW -n $name"
            fi
        done
        ;;
    reload)
        echo "Reloading $name..."
	if [ $DEBIAN -eq 1 ]; then
            start-stop-daemon --stop --signal HUP -x $RADOSGW --oknodo
	else
            killproc $RADOSGW -HUP
	fi
	;;
    restart|force-reload)
        $0 stop
        $0 start
        ;;
    stop)
        timeout=0
        for name in $dlist
        do
          t=`$RADOSGW -n $name --show-config-value rgw_exit_timeout_secs`
          if [ $t -gt $timeout ]; then timeout=$t; fi
        done

	if [ $DEBIAN -eq 1 ]; then
            if [ $timeout -gt 0 ]; then TIMEOUT="-R $timeout"; fi
            start-stop-daemon --stop -x $RADOSGW --oknodo $TIMEOUT
	else
	    killproc $RADOSGW
	    while pidof $RADOSGW >/dev/null && [ $timeout -gt 0 ] ; do
		sleep 1
		timeout=$(($timeout - 1))
            done
	fi
        ;;
    status)
        daemon_is_running $RADOSGW
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|force-reload|reload|status} [-v|--verbose]" >&2
        exit 3
        ;;
esac