Ubuntu进程不是从jenkins开始的

时间:2015-12-18 05:35:48

标签: ubuntu jenkins sh

我正在尝试运行以下脚本,以便在ubuntu服务器上从jenkins重启servicemix进程。

#!/bin/sh
killservicemix() {
if ps ax | grep -v grep | grep "apache-servicemix" > /dev/null
then
process=$(echo $(ps -elf | grep -v grep | grep "apache-servicemix" | awk '{print $4}'))
echo "killing service mix"
kill -9 $process ;
sleep 2;
killservicemix
fi
}
#Method to stop servicemix
stopservicemix() {
if ps ax | grep -v grep | grep "apache-servicemix" > /dev/null
   then
    echo "Stop Service mix"
    /home/ubuntu/apache-servicemix-4.3.0/bin/stop
    sleep 10;
    killservicemix
fi
}
stopservicemix
sleep 15

#restarting Servicemix
nohup /home/ubuntu/apache-servicemix-4.3.0/bin/start >/dev/null 2>&1 &
if [ "$?" -eq 0 ]; then
    ps -elf|grep servicemix
    echo 'ServiceMix start command executed'
else
    echo 'ServiceMix start command failed'
fi
echo 'started Servicemix';

当我从终端运行这个脚本时,它运行正常。但是当我从jenkins运行它时,它将终止servicemix进程,但它不会再次启动它并显示"执行ServiceMix启动命令"。

我甚至尝试过使用Build参数" dontKillMe"但仍然没有结果。

任何帮助都将不胜感激。

先谢谢

1 个答案:

答案 0 :(得分:1)

您需要的是禁用进程树杀手。

java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

我最近遇到了同样的问题,试图通过Jenkins启动应用服务器。它从控制台开始工作正常,但是当从Jenkins运行脚本时,该过程消失了。

这是由于Jenkins如何处理自己的进程。默认情况下,它们会在作业完成时被终止,以防止系统混乱。通过禁用ProcessTree选项,Jenkins将保留脚本(以及服务等后台进程)的运行。这是你的控制台工作和Jenkins之间的区别。

nohup /home/ubuntu/apache-servicemix-4.3.0/bin/start >/dev/null 2>&1 &启动servicemix,但是一旦完成该任务,该进程就会被终止。这就是为什么看起来好像没有开始这个过程。