Java 使用monit监视shell脚本
我有一个shell脚本,它生成了一个java进程,我想将它包装在一个包装器中,以便与monit一起使用 我已经试过莫尼特的推荐了Java 使用monit监视shell脚本,java,bash,shell,monit,Java,Bash,Shell,Monit,我有一个shell脚本,它生成了一个java进程,我想将它包装在一个包装器中,以便与monit一起使用 我已经试过莫尼特的推荐了 #!/bin/bash name=`basename $1` case $2 in start) echo $$ > /var/run/service.pid; exec 2>&1 $1 1>/var/log/$name.stdout ;; stop) kill `c
#!/bin/bash
name=`basename $1`
case $2 in
start)
echo $$ > /var/run/service.pid;
exec 2>&1 $1 1>/var/log/$name.stdout
;;
stop)
kill `cat /var/run/service.pid` ;;
*)
echo "usage: <path to app> {start|stop}" ;;
esac
#/bin/bash
name=`basename$1`
案件二元
开始)
echo$$>/var/run/service.pid;
exec 2>&1$1>/var/log/$name.stdout
;;
(停止)
kill`cat/var/run/service.pid`;;
*)
echo“用法:{start | stop}”;;
以撒
在这里,我将使用它,比如wrapper.sh/usr/sbin/cmd start
当我这样做的时候,我看到2个过程旋转起来。一个是包装器中的exec,另一个是我的java进程
但是,$
的pid是/usr/sbin包装器的pid,而不是实际的java进程的pid。因此,如果我“停止”服务或杀死该pid,那么java进程将成为孤立进程
另一方面,如果我在前台运行
/usr/sbin/cmd
,然后杀死它,它确实会杀死子进程。在运行命令之前,您无法获取pid,但可以使用$代码>。另外,我建议您使用nohup
。大概是
nohup $1 > /var/log/$name.stdout 2>&1 &
echo $! > /var/run/service.pid
如果您exec
将java进程作为脚本aove dows,则所述java进程将替换运行包装器的shell进程,从而保持相同的PID。您的问题是java进程进一步分叉了其他进程。谢谢,这是我需要的关键。在执行java进程的/sbin命令中,我还需要在java调用之前添加exec
,以便它也使用相同的pid。现在,在我的sbin包装中,我有了execjava…
,一切都很好。谢谢