A bash script to monitor and log a CLI application

I am doing Java this session and have done my assignment 4 for socket practices.

The assignment contains 2 parts: Client and server.

I can’t modify the assignment to have proper log details (e.g. add time to logs) because it will lose marks 🙁

So, I did a bash script named “run”.

#!/bin/bash
# Author name: Need-Being
# Modification date: 14/10/2011
trap "" SIGHUP
cd Server
java JavaQuizServer 2>&1 | while read LINE
do
        echo "`date '+[20%y/%m/%d-%T]'`[java] $LINE" >> ../JavaQuiz.log
done

“java JavaQuizServer” is the line to execute the program. I add the time before whatever it output and send it to “JavaQuiz.log”
‘trap “” SIGHUP’ is used for ignore signal SIGUP that it can be alive after closing it parent process i.e. ssh.

The logs are like this:

[2011/10/17-14:46:12][java] JavaQuizServer listening at: 40213
[2011/10/17-14:46:44][java] wang registered
[2011/10/17-14:46:57][java] wang disconnected

However, wumpus (which is a sparc machine of our school) will kill process of normal user after a few hours.
So I want to know how long it can live before killed.

Here is another bash script name monitor:

#!/bin/bash
# Author name: Need-Being
# Modification date: 14/10/2011
INFO=`ps -p $1 -o"pid args"`
if [ $? = 0 ]
then
        INFO=`echo "$INFO" | tail -1`
        echo "`date '+[20%y/%m/%d-%T]'`[logs] START:$INFO" >> JavaQuiz.log
else
        echo "No such process: $1"
        exit
fi
while sleep 300
do
        if ps -p $1 > /dev/null
        then
                echo "`date '+[20%y/%m/%d-%T]'`[logs] ALIVE:$INFO" >> JavaQuiz.log
        else
                echo "`date '+[20%y/%m/%d-%T]'`[logs] DEAD:$INFO" >> JavaQuiz.log
                exit
        fi
done

The usage is easy: monitor pid &
pid is the process id of your process you want to monitor.
It can used for any process 🙂

Here is a sample of running log:

[2011/10/14-11:45:20][java] JavaQuizServer listening at: 40213
[2011/10/14-11:45:26][logs] START: 7361 /bin/bash ./run
[2011/10/14-11:45:50][logs] START: 7362 java JavaQuizServer
[2011/10/14-11:50:50][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-11:55:50][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-12:00:50][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-12:51:21][java] Error: Thread 8: Cannot open streams: null
[2011/10/14-12:52:25][logs] START: 7362 java JavaQuizServer
[2011/10/14-12:57:25][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:02:25][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:07:25][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:12:26][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:17:26][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:22:26][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:27:26][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:32:26][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:37:26][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:42:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:47:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:52:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-13:57:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:02:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:07:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:12:27][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:17:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:22:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:27:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:32:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:37:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:42:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:47:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:52:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-14:57:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:02:28][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:07:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:12:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:17:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:22:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:27:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:32:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:37:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:42:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:47:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:52:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-15:57:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-16:02:29][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-16:07:30][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-16:12:30][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-16:17:30][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-16:22:30][logs] ALIVE: 7362 java JavaQuizServer
[2011/10/14-16:27:30][logs] DEAD: 7362 java JavaQuizServer

You can find that a process on wumpus only can be alive for 4 hours and a half.

Published by

Need-Being

You never know me... Need-Being... Human Being? or Just Being Here...

Leave a Reply

Your email address will not be published. Required fields are marked *