Results 1 to 4 of 4
Hello,
I was wondering if someone could help me out. I am new to scripting and been working on this bash script for awhile now. I've been researching this problem, ...
- 05-28-2009 #1Just Joined!
- Join Date
- May 2009
- Posts
- 2
using the process status (ps) command in a bash script
Hello,
I was wondering if someone could help me out. I am new to scripting and been working on this bash script for awhile now. I've been researching this problem, but I can't seem to find a solution. I was wondering if someone could please help me out. Here is my script:
#!/bin/bash
NO="ps -ef | grep NO | grep -v grep"
NOWC=`ps -ef | grep NO | grep -v grep | wc -l`
for CLIENT in $*
do
ssh $CLIENT -l root "if [ $NOWC -gt 0 ] ; then
echo "there are $NOWC processes running"
echo "Here is the list of process"
eval $NO
fi
echo "Cannot find that process"
echo "Good Bye"
exit"
done
exit 0
Here is the problem. I cannot get this script to run the "ps -ef" command on the client. It get its value from the host machine that I am running this script from. I need this command to execute on the client. When I run the command (ps -ef | grep NO | grep -v grep) on the client, I get something back. Here is what I get when I try to debug the script.
XX# ./test_ps5.sh XXXXX
+ NO='ps -ef | grep NO | grep -v grep'
++ ps -ef
++ grep NO
++ grep -v grep
++ wc -l
+ NOWC=0
+ for CLIENT in '$*'
+ ssh XXXXX -l root 'if [ 0 -gt 0 ] ; then
echo there' are processes 'running
echo Here' is the list of 'process
eval ps -ef | grep NO | grep -v grep
fi
echo Cannot' find that 'process
echo Good' 'Bye
exit'
Cannot find that process
Good Bye
+ exit 0
XX#
Any input would be appreciated and thank you in advance for your help!!Last edited by young_linux; 05-28-2009 at 02:01 AM. Reason: Needed to change the $JOBNOWC variable to $NOWC. Changed this on my original script but forgot to change it on this post.
- 05-28-2009 #2Just Joined!
- Join Date
- Dec 2006
- Posts
- 85
hmm...im not entirely sure..but as i remember those variables are not set on the client machine,which is where ssh is looking for them...i may be wrong...
i seen one which may be related to your problem they sai they had to wrap the ssh command in a variable and execute the variable so maybe:
sshcmd="ssh $CLIENT -l root "if [ $NOWC -gt 0 ] ; then
echo "there are $NOWC processes running"
echo "Here is the list of process"
eval $NO
fi
echo "Cannot find that process"
echo "Good Bye"
exit"
"
and then just call $sshcmd
(as this evaluates the variables before running, while the command you gave evaluates the variables after)
- 05-29-2009 #3Linux User
- Join Date
- May 2008
- Location
- NYC, moved from KS & MO
- Posts
- 251
The reason why your script didn't work is that NOWC line is executed on the local host before it's sent over to the remote host.
As the_ultimate_samurai said, you can wrap up a long command line after the ssh command but it's gonna be quite messy. The simplest way I can think of is to write that process query script and store it to the remote host's disk (for example, /root/process_script), make it executable, then
change the ssh line on your localhost machine to
ssh $CLIENT -l root /root/process_script
- 05-29-2009 #4Just Joined!
- Join Date
- May 2009
- Posts
- 2
Thank you both for yalls posts and suggestions. You were both right and after going back an adjusting my script, I finally (with yalls help) was able to get what I wanted. Here is the script that works:
I'm new to scripting and it is very challenging. I spent days trying to figure out why the $NOWC variable was returning a value of zero. I'm just glad that there are forums like this one that people are willing to help each other out. I really appreciate that. Thanks again the_ultimate_samurai and secondmouse for yalls help.Code:#!/bin/bash for CLIENT in $* do NO=`ssh $CLIENT -l root "ps -ef | grep NO | grep -v grep"` NOWC=`ssh $CLIENT -l root "ps -ef | grep NO | grep -v grep | wc -l"` if [ $NOWC -gt 0 ] ; then echo "There are $NOWC process(es) running" echo "Here are the list of process(es)" echo "$NO" else echo "Cannot find that process" echo "Good Bye" fi done exit 0


Reply With Quote