我们在一台服务器上部署了8个redis,显然手动停止/启动多个redis不是很方便,所以写了一个shell脚本,就是为了能够同时停止/启动多个redis。使用了两个自定义函数,一个case条件,多个if条件,还有几个for循环,另外就是shift,用以处理用户传递的多个参数。
这个脚本感觉有点臃肿,可能使用数组会好点,但是我不擅长数组;也考虑过使用自定义函数来判断用户输入的redis是否合法,或正在运行,但shell函数显然不太擅长处理用户传递的多个脚本参数。
这个脚本感觉有点臃肿,可能使用数组会好点,但是我不擅长数组;也考虑过使用自定义函数来判断用户输入的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 P=$(status |/bin/grep $INS |/bin/awk '{print $1}') if [ -z "$P" ]; then echo "'$INS' is not running." else /bin/kill -9 $P && echo "Stop '$INS' successfully." || echo "Stop '$INS' failed."