Hey all, I wrote a very basic script to determine if cassandra db is running. I'm setting a variable called 'pid' to the output of a ps | grep like to grab the pid of the cassandra process. #!/bin/bash pid=$(ps -ef | grep cassandra | grep -v grep | grep -i -v -e grep -e screen -e s3fs|awk '{print $2}') if [[ -e $pid ]] then echo "Cassandra is running with pid: $pid" else echo "Cassandra is DOWN!!!" fi But for some reason the script doesn't realize that the pid variable has been set, and fails the condition. It then reports that Cassnadra is DOWN!!!". [root at web1:~] #sh -x ./bin/check-cass.sh ++ ps -ef ++ grep -v grep ++ grep -i -v -e grep -e screen -e s3fs ++ awk '{print $2}' ++ grep cassandra + pid=26979 + [[ -e 26979 ]] + echo 'Cassandra is DOWN!!!' Cassandra is DOWN!!! Can anybody tell me where I'm going wrong here? Because from what I can see, clearly the pid variable is being set so the script should be reporting that cassandra is up! I'd appreciate any advice you may have. Thanks, Tim -- GPG me!! gpg --keyserver pool.sks-keyservers.net --recv-keys F186197B
On Sun, Apr 19, 2015 at 01:15:36PM -0400, Tim Dunphy wrote:> if [[ -e $pid ]]"-e" means "if file exists". You should use "-n" -- rgds Stephen
Tim Dunphy <bluethundr at gmail.com> a ?crit?:> Hey all,Hi, -e checks file existence. As you don?t have a file named 26979 in your pwd, test fails logically. If you want to know if variable is set, you can use -z $pid. You could also try -d /proc/$pid. HTH, Laurent.
On Sun, 2015-04-19 at 13:15 -0400, Tim Dunphy wrote:> Hey all, > > I wrote a very basic script to determine if cassandra db is running. I'm > setting a variable called 'pid' to the output of a ps | grep like to grab > the pid of the cassandra process.Insert an extra line after #!/bin/bash set -xv which will show helpful debug messages. -- Regards, Paul. England, EU. Je suis Charlie.
> > "-e" means "if file exists". You should use "-n"That did it!! [root at web1:~] #./bin/check-cass.sh Cassandra is running with pid: 26979 This is what the script looks like now: #!/bin/bash pid=$(ps -ef | grep cassandra | grep -v grep | grep -i -v -e grep -e screen -e s3fs|awk '{print $2}') if [[ -n $pid ]] then echo "Cassandra is running with pid: $pid" else echo "Cassandra is DOWN!!!" fi Insert an extra line after #!/bin/bash> set -xv > which will show helpful debug messages.Good tip! But I ran the script with sh +x . I guess that running it with sh +xv would do the same thing. But that is a useful tip to include the debug lines right in the script. I'll have to remember that for next time! Thanks! :) Tim On Sun, Apr 19, 2015 at 1:55 PM, Always Learning <centos at u64.u22.net> wrote:> > On Sun, 2015-04-19 at 13:15 -0400, Tim Dunphy wrote: > > Hey all, > > > > I wrote a very basic script to determine if cassandra db is running. I'm > > setting a variable called 'pid' to the output of a ps | grep like to grab > > the pid of the cassandra process. > > Insert an extra line after #!/bin/bash > > set -xv > > which will show helpful debug messages. > > > -- > Regards, > > Paul. > England, EU. Je suis Charlie. > > > _______________________________________________ > CentOS mailing list > CentOS at centos.org > http://lists.centos.org/mailman/listinfo/centos >-- GPG me!! gpg --keyserver pool.sks-keyservers.net --recv-keys F186197B