Запускается java прилада командой /usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
как получить PID получившегося процесса?
Нужно контролировать, чтобы был запущен только один экземпляр процесса.
Если в баше, то $!
>Если в баше, то $!например скрипт выглядит так:
-------
#!/bin/bash
/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
--------
он запускается кроном
каким образом сделать проверку перед запуском, что предыдущий процесс закончен, если процесс не закончен не надо запускать.
Наиболее распространенный алгоритм для вашей задачи при условии синхронного выполнения:
1. Проверяем наличие лок-файла(например /tmp/JavaAgent.lock), если он есть то выходим
2. создаем лок-файл
3. запускаем все что нужно
4. убираем лок-файл и выходим.
Если запускаемый процесс асинхронный(то есть остается работать и сразу возвращает управление), то придется таки получать его PID, сохранять в файлике и проверять наличие процесса с этим pid, например через /proc
так:
----------------------
#!/bin/bash
JA_PID=/var/run/JavaAgent.pid
/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
echo $! > $JA_PIDecho `cat $JA_PID`
--------------------
или так:
-----------------------
#!/bin/bash
program="JavaAgent.jar"/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar
PID=`ps -aef | grep "$program" | grep -v grep | awk '{print $2}'`
echo $PID
-----------------------
только не надо забывать, что прозесс может умереть или крашанутся, а pid файл останется
>только не надо забывать, что прозесс может умереть или крашанутся, а pid
>файл останетсяНу если уж... то так?
#!/bin/bash
#
PROGRAM="JavaAgent.jar"
JA_PID=/var/run/JavaAgent.pid
PROG_BIN="/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar"
PID=`ps -aef | grep "$PROGRAM" | grep -v grep | awk '{print $2}'`case "$1" in
start)if [ ! -z $PID ]
then
echo -n "Daemon JavaAgent is running"
echo ""
else
echo -n "Starting JavaAgent: "
$PROG_BIN > /dev/null 2>&1 &
echo $! > $JA_PID
echo "Daemon JavaAgent started. PID:$!"
echo ""
fi
;;
stop)
echo -n "Shutting down JavaAgent: "
echo ""
for i in $PID; do
kill -9 $i
rm -f $JA_PID
done
echo -n "Daemon JavaAgent is down."
echo ""
;;
restart)
$0 stop
$0 start;;
status)
if [ ! -z $PID ]
then
echo -n "Daemon JavaAgent is running"
echo ""
else
echo -n "Daemon JavaAgent is down."
echo ""
fi
;;
*)
echo "Usage: JavaAgent {start|stop|restart|status}"
exit 1
esacexit 0
PC: Если всё-таки будут запущены несколько процессов "JavaAgent", то будет лучше блок "status)" переписать так:
#!/bin/bash
#
PROGRAM="JavaAgent.jar"
JA_PID=/var/run/JavaAgent.pid
PROG_BIN="/usr/java/jre1.6.0_06/bin/java -Xmx128m -jar /home/notes/JavaAgent.jar"
PID=`ps -aef | grep "$PROGRAM" | grep -v grep | awk '{print $2}'`case "$1" in
start)if [ ! -z $PID ]
then
echo -n "Daemon JavaAgent is running"
echo ""
else
echo -n "Starting JavaAgent: "
echo ""
$PROG_BIN > /dev/null 2>&1 &
echo $! > $JA_PID
echo "Daemon JavaAgent started. PID:$!"
echo ""
fi
;;
stop)
echo -n "Shutting down JavaAgent: "
echo ""
for i in $PID; do
kill -9 $i
rm -f $JA_PID
done
echo -n "Daemon JavaAgent is down."
echo ""
;;
restart)
$0 stop
$0 start;;
status)
STATUS=`ps -aef | grep "$PROGRAM" | grep -v grep | awk '{print $2}' | head -1`
if [ ! -z $STATUS ]
then
echo -n "Daemon JavaAgent is running"
echo ""
for i in $PID; do
echo PID:$i
done
echo ""
else
echo -n "Daemon JavaAgent is down."
echo ""
fi
;;
*)
echo "Usage: JavaAgent {start|stop|restart|status}"
exit 1
esacexit 0