Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用monit监视shell脚本_Java_Bash_Shell_Monit - Fatal编程技术网

Java 使用monit监视shell脚本

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

我有一个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 `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…
,一切都很好。谢谢