When starting multiple instances of a daemon on a single host,
for unknown reasons /var/run/ceph/$type.$id.pid can hold a pid
for which /proc/$pid/cmdline identifies the right type of daemon,
but the wrong instance. When this happens, all the configured
instances of a daemon are not running, but repeated invocations
of "init-ceph start" do not start the missing instances.
So, check for the correct daemon instance id as well as type when
testing if the daemon is up.
Signed-off-by: Jim Schutt <jaschut@sandia.gov>
Signed-off-by: Sage Weil <sage@newdream.net>
daemon_is_running() {
name=$1
daemon=$2
- pidfile=$3
+ daemon_id=$3
+ pidfile=$4
do_cmd "[ -e $pidfile ] || exit 1 # no pid, presumably not running
pid=\`cat $pidfile\`
- [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline && exit 0 # running
+ [ -e /proc/\$pid ] && grep -q $daemon /proc/\$pid/cmdline && grep -qwe -i.$daemon_id /proc/\$pid/cmdline && exit 0 # running
exit 1 # pid is something else" "" "okfail"
}
# start, and already running? (do this check early to avoid unnecessary work!)
if [ "$command" = "start" ]; then
- if daemon_is_running $name c$type $pid_file; then
+ if daemon_is_running $name c$type $id $pid_file; then
echo "Starting Ceph $name on $host...already running"
continue
fi