我们在一台服务器上部署了8个Redis,显然手动停止/启动多个redis不是很方便,所以写了一个shell脚本,就是为了能够同时停止/启动多个redis。使用了两个自定义函数,一个case条件,多个if条件,还有几个for循环,另外就是shift,用以处理用户传递的多个参数。
这个脚本感觉有点臃肿,可能使用数组会好点,但是我不擅长数组;也考虑过使用自定义函数来判断用户输入的redis是否合法,或正在运行,但shell函数显然不太擅长处理用户传递的多个脚本参数。
#!/bin/bash
#2011-10-10 by qinshan.li
#
PROCESS=$(pgrep redis)
SEP='------------------'
PATH=/usr/local/redis-2.2.8
status() {
if [ -z "$PROCESS" ]
then
echo "No redis is running..."
else
echo "PID NAME PORT"
echo $SEP
/bin/ps -ef |/bin/grep redis |/bin/grep -v grep |/bin/awk '{print $2" "$9}' |/bin/awk -F ' +|/' '{print $1" "$6}' >process.txt
/bin/netstat -anp |/bin/grep redis |/bin/awk -F "(:|/)" '{print $2" "$3}' |/bin/awk '{print $5" "$1}' >port.txt
/usr/bin/join process.txt port.txt
echo $SEP
fi
}
start() {
for i in $(/bin/ls); do
if [ -d $PATH/$i ]; then
P=$(/bin/ps -ef |/bin/grep $i |/bin/grep -v grep |/bin/awk '{print $2}')
if [ -n "$P" ]; then
echo "'$i' is running. Stop it first."
else
echo -e "Starting redis '$i'..."
/usr/bin/nohup /usr/local/bin/redis-server $PATH/$i/redis.conf >/dev/null 2>&1 &
fi
fi
done
}
case $1 in
stop)
if [ $# -eq 1 ]; then
/bin/kill -9 $(/usr/bin/pgrep redis)
else
shift
for INS in "$@"
do
if [ -d $PATH/$INS ]; then