2011-11-18 41 views
2

我有一个glassfish安装,我想要一个简单的终端命令检查它是否正在运行。如果是,它将关闭该过程。或者如果它没有运行,它会启动服务器。终端命令:启动或停止过程如果它正在运行

要开始我可以进入服务器:

/Applications/NetBeans/glassfish-3.1.1/bin/./asadmin start-domain domain 

要停止我可以进入服务器:

/Applications/NetBeans/glassfish-3.1.1/bin/.asadmin stop-domain domain 

我会想作一个简单的脚本Alfred.app比可以启动这个如果它没有运行,则将其停止;如果它正在运行,则停止它。

回答

1

执行此操作的一种方法是在文件中记录服务器启动时的进程标识,并进行其他脚本检查以查看该进程是否正在运行。

例如,脚本A(无条件地运行服务器):

#!/bin/sh 
/Applications/NetBeans/glassfish-3.1.1/bin/./asadmin start-domain domain 
# file name is arbitrary 
pgrep whateverTheProcessNameIs > ~/.glassfish-server.pid 

而且在脚本B:

#!/bin/sh 
pid=`pgrep -F ~/.glassfish-server.pid` # file chosen in script A 
if [ "x$pid" = "x" ] ; then 
    # process has died; restart by running script A 
    /path/to/scriptA 
fi 

需要注意的是仅适用于Mac OS X 10.8(山狮)安装pgrep默认;否则你不得不使用其他方法(如解析ps输出)来查看正在运行的进程。

至于如何定期执行此检查,有多种方法。我假设阿尔弗雷德会运行任何可执行的脚本(chmod +x scriptA scriptB),但我不知道。

相关问题