1

我正在开发一个 Java 程序,它检查正在运行的进程,如果没有启动该进程。在我的上下文中,我正在执行这样的 .sh 文件。

#!/bin/sh
echo "Hello World..."
cnt=`ps -eaflc --sort stime | grep clientApplication.jar | grep -v grep | wc -l`
if [ $cnt = 3 ] 
then
        echo "Services for Pigeon are already running..."
else
        echo "Starting Services for Pigeon..."
        echo `java -jar clientApplication.jar`
fi

但它不起作用。有什么问题?

4

4 回答 4

0

我不确定。试试这个

cnt=$(`ps -eaflc --sort stime | grep clientApplication.jar | grep -v grep | wc -l`)
if[$cnt -eq 3]; then

试试这个

于 2013-01-24T12:23:57.343 回答
0

使用测试表达式有效。希望这可以帮助 !!

echo "Hello World"
cnt=`ps -eaflc --sort stime | grep clientApplication.jar |grep -v grep | wc -l`
if(test $cnt -eq 3) ;
then
    echo "Services for Pigeon are already running..."
else
    echo "Starting Services for Pigeon..."
    echo `java -jar clientApplication.jar`
fi
于 2013-01-24T12:54:41.343 回答
0
echo 不会执行任何操作,只会打印双引号中的内容。因此,如果我了解您的要求,您应该这样做而不是

echo "Hello World" cnt= ps -eaflc --sort stime | grep clientApplication.jar |grep -v grep | wc -l if(test $cnt -eq 3) ; 然后回显“Pigeon 的服务已经在运行...” else echo “正在为 Pigeon 启动服务...” /bin/java -jar clientApplication.jar fi

希望这会奏效,我现在还没有测试过
于 2013-01-24T14:23:31.873 回答
0
  1. 等式检查应该是==,=是赋值
  2. 我会使用 $(expr) 而不是 `expr`
  3. if(expr) 不是 if[expr]
  4. 不确定您是否打算回显 java 行,它不会通过告诉它打印来启动 jar。我摆脱了回声,因为你说你想开始它。

所以如果你试试这个,它会起作用:

    #!/bin/sh
    回声“你好世界...”
    cnt=$(ps -eaflc --sort stime | grep clientApplication.jar | grep -v grep | wc -l)
    如果($cnt==3)
    然后
        echo "Pigeon 服务已经在运行..."
    别的
        echo "开始为鸽子服务..."
        java -jar clientApplication.jar
    菲
于 2013-01-24T14:49:56.527 回答