#cassandra
#кассандра
Вопрос:
База данных Cassandra работает нормально, но когда я выполняю /etc/init.d/cassandra status
, она говорит cassandra is stopped
. В сценарии я жестко запрограммировал местоположение pid так /var/run/cassandra/cassandra.pid
, чтобы после выполнения скрипта в режиме отладки заметил, что скрипт использует неправильное расположение /var/run/cassandra.pid
файла pid. Вот вывод ниже. Любая идея, где скрипт получает эту информацию о местоположении pid.
вывод отладки.
. /etc/sysconfig/network
NETWORKING_IPV6=no
HOSTNAME=rvagcas01
NETWORKING=yes
NOZEROCONF=yes
prog=Cassandra
pidfile=/var/run/cassandra/cassandra.pid
progbin=/db/cassandra/bin
lock=/db/cassandra/cassandra.lock
logfile=/db/cassandra/logs/service.log
user=cassandra
case "$1" in
status cassandra
local base pid lock_file= pid_file= binary=
'[' 1 = 0 ']'
'[' cassandra = -p ']'
'[' cassandra = -l ']'
'[' cassandra = -b ']'
base=cassandra
__pids_var_run cassandra '' ''
local base=cassandra
local pid_file=/var/run/cassandra.pid
/usr/bin/dirname /var/run/cassandra.pid
local pid_dir=/var/run
local binary=
'[' -d /var/run -a '!' -r /var/run ']'
pid=
'[' -f /var/run/cassandra.pid ']'
return 3
RC=3
'[' -z '' -a -z '' ']'
__pids_pidof cassandra
pidof -c -m -o 25634 -o 23662 -o %PPID -x cassandra
pidof -c -m -o 25634 -o 23662 -o %PPID -x cassandra
pid=
'[' -n '' ']'
case "$RC" in
'[' -z '' ']'
lock_file=cassandra
'[' -f /var/lock/subsys/cassandra ']'
echo 'cassandra is stopped'
cassandra is stopped
return 3
exit 3
вот сценарий запуска.
# cat /etc/init.d/cassandra
#!/bin/bash
# Cassandra database
### BEGIN INIT INFO
# Provides: cassandra
# Required-Start: $remote_fs $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Apache Cassandra database server
# Description: Apache Cassandra database server
### END INIT INFO#
# Author:
#
#
# Description: Cassandra Server.
# Processname: cassandra
# Config: /app/cassandra/conf/cassandra.yaml
set -x
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
prog="Cassandra"
pidfile="/var/run/cassandra/cassandra.pid"
progbin="/app/cassandra/bin"
lock="/app/cassandra/cassandra.lock"
logfile="/app/cassandra/logs/service.log"
user=cassandra
WriteLog()
{
echo "`date`: $@" >> $logfile
}
LogInfo()
{
echo "$@"
WriteLog "INFO: $@"
}
LogWarning()
{
echo "$@"
WriteLog "WARNING: $@"
}
start()
{
if [ -f $pidfile ] amp;amp; checkpid `cat $pidfile`; then
action "$prog is already running." /bin/false
exit 0
fi
WriteLog "Starting $prog"
daemon --user $user "$progbin/cassandra" -p $pidfile >> $logfile 2>amp;1
usleep 500000
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
touch "$lock"
action "Starting $prog" /bin/true
else
action "Starting $prog" /bin/false
fi
WriteLog "Started $prog"
return $RETVAL
}
stop()
{
$progbin/nodetool -h localhost disablethrift
$progbin/nodetool -h localhost disablegossip
$progbin/nodetool -h localhost drain
WriteLog "Stopping $prog"
CASSIEPID=`cat "$pidfile" 2>/dev/null `
if [ -n "$CASSIEPID" ]; then
/bin/kill "$CASSIEPID" >/dev/null 2>amp;1
ret=$?
if [ $ret -eq 0 ]; then
STOPTIMEOUT=60
while [ $STOPTIMEOUT -gt 0 ]; do
/bin/kill -0 "$CASSIEPID" >/dev/null 2>amp;1 || break
sleep 1
let STOPTIMEOUT=${STOPTIMEOUT}-1
done
if [ $STOPTIMEOUT -eq 0 ]; then
echo "Timeout error occurred trying to stop $prog Daemon"
ret=1
action $"Stopping $prog: " /bin/false
LogInfo "Timeout error occurred trying to stop $prog Daemon pid($CASSIEPID)"
else
rm -f "$lock"
action $"Stopping $prog: " /bin/true
WriteLog "INFO: $prog Daemon Stopped pid($CASSIEPID)"
fi
else
action $"Stopping $prog: " /bin/false
WriteLog "WARNING: $prog Daemon Stop Failed pid($CASSIEPID)"
fi
else
ret=1
action $"Stopping $prog: " /bin/false
fi
return $ret
}
restart()
{
LogInfo "Restart Initiated"
stop
start
}
ring()
{
$progbin/nodetool -h localhost ring
}
info()
{
$progbin/nodetool -h localhost info
}
netstats()
{
$progbin/nodetool -h localhost netstats
}
repair()
{
LogInfo "Starting Repair"
$progbin/nodetool -h localhost repair
LogInfo "Completed Repair"
}
cleanup()
{
LogInfo "Starting Cleanup"
$progbin/nodetool -h localhost cleanup
LogInfo "Completed Cleanup"
}
version()
{
$progbin/nodetool -h localhost version
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status cassandra
;;
restart)
restart
;;
ring)
ring
;;
info)
info
;;
netstats)
netstats
;;
repair)
repair
;;
cleanup)
cleanup
;;
version)
version
;;
*)
echo $"Usage: $0 {start|stop|status|restart|ring|info|netstats|repair|cleanup|version}"
exit 1
esac
exit $?
#
Ответ №1:
У меня нет скрипта, который вы использовали для запуска / остановки / состояния.
Я предполагаю, что причина в __proc_pids в вашем отладочном выводе, в этом скрипте жестко указано местоположение.
/etc/init.d/функции
# __proc_pids {program} [pidfile]
# Set $pid to pids from /var/run* for {program}. $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
local base=${1##*/}
local pid_file=${2:-/var/run/$base.pid}
Вы можете сослаться на этот пример, я просматриваю его, кажется, может удовлетворить ваши требования.
Комментарии:
1. Спасибо за ответ. Я добавил сценарий запуска. Мне придется изменить
status
функцию.