| 关键词: nbsp bin redis echo INS then status grep start print |
我们在一台服务器上部署了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 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." fi else echo "No redis named '$INS' to stop." fi shift done fi ;; start) if [ $# -eq 1 ]; then start else shift for INS in "$@" do if [ -d $PATH/$INS ]; then P=$(status |/bin/grep $INS |/bin/awk '{print $2}') if [ -n "$P" ]; then echo "'$INS' is running. Stop it first." elif /usr/bin/nohup /usr/local/bin/redis-server $PATH/$INS/redis.conf >/dev/null 2>&1 & then echo "Start '$INS' successfully." else echo "Start '$INS' failed." fi else echo "No redis named '$INS' to start." fi shift done fi ;; status) if [ $# -eq 1 ]; then status else echo "Usage: `/bin/basename $0` status" fi ;; *) echo "Usage: `/bin/basename $0` status |start [redis-n1]... |stop [redis-n1]..." ;; esac |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|