使用Shell脚本检查进程

我正在开发一个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 

但它不工作。 有什么问题?

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

 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 

我不确定。 尝试这个

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

试试这个

回声将不会执行任何事情,只会打印双引号中的内容。 所以,如果我理解你的要求,你应该这样做,而不是

echo“Hello World”cnt = ps -eaflc --sort stime | grep clientApplication.jar |grep -v grep | wc -l ps -eaflc --sort stime | grep clientApplication.jar |grep -v grep | wc -l ps -eaflc --sort stime | grep clientApplication.jar |grep -v grep | wc -l if(test $ cnt -eq 3); 然后回声“服务鸽子已经运行…”否则回声“启动服务的鸽子…” /bin/java -jar clientApplication.jar fi

希望这会起作用,我现在还没有测试过

  1. 平等检查应该是==,=是分配
  2. 我会使用$(expr)而不是`expr`
  3. 如果(expr)不是[expr]
  4. 不知道是否打算回显java行,它不打算告诉它打印的jar。 自从你说你想开始,我摆脱了回声。

所以如果你尝试这个,它会工作:

     #!/ bin / sh的
    回声“Hello World ...”
     cnt = $(ps -eaflc --sort sti | grep clientApplication.jar | grep -v grep | wc -l)
    如果($ CNT == 3) 
    然后
        回声“鸽子服务已经运行...”
    其他
        回声“启动服务鸽子...”
         java -jar clientApplication.jar
    科幻