所以,我想find一个整洁的解决scheme的问题是,当我login到服务器(我有一些Solaris和RHEL实例),我试图找出正在运行的应用程序:
$ ps -auxww | grep <thing I look for, usually Java>
并且我得到了一个很好的进程列表,PID,额外的细节,以及与它一起执行的整个进程名称和参数。 虽然这通常为我提供了足够的信息来找出正在运行的内容,但是一些服务器的运行方式却是不同 我可能有一个服务器有多个应用程序服务器的实例用于不同的目的。 其他stream程是我与非冻结stream程混合的一个挂起stream程的残余。 我不想closures所有的java实例,因为我找不到需要查杀的进程。
我想提供的解决scheme是在我的启动脚本期间,我想预先或附加到一个过程中的一些文本,让我扔一个简短的描述英寸有什么可以让我这样做吗?
如果我所说的话听起来不可能/愚蠢/完全不是他的摇杆,那么我可以开放替代解决scheme,让我有能力完成同样的事情。 我对想法持开放态度,但是这个想法是可行的。
这是一个重力的build议的例子:
$ MARKER=snooze sleep 120& $ ps ew | grep -o ".*[M]ARKER=snooze" 11741 pts/2 S 0:00 sleep 120 MARKER=snooze
e
选项使ps
打印进程的环境。 -o
选项和正则expression式使得grep
在我们正在search的部分之后切断任何环境,但是我不会打赌它始终具有干净的结果(更多的环境可能被打印)。 将模式的一部分放在方括号中,执行人们经常使用grep -v
function – 从结果中消除grep
本身。
这听起来像你想要唯一标记每个进程,以便您可以轻松地发现它。 实际上我听说他们的监控团队正在大公司完成 – 每个应用程序都有一个独特的代码,可以通过ps和grep轻松find。
在Java上,你可以使用-D来设置任何variables,所以你可以很容易地添加一些像“-Dmonitoringid =”。 这个过程会忽略它,但你可以很容易地find它。
或者,您可以将您的应用程序服务器拆分为每个在特定于所提供应用程序的ID下运行。 我们目前运行一个J2EE应用程序服务器的大型农场,每个框上都有许多应用程序,但是每个应用程序都在自己的ID下运行,以分割所有权,访问权限,控制权等。
这也意味着在主机上查找任何给定的应用程序服务器就像下面这样简单: ps <whichever ps args you like best> | grep java | grep <uid> | grep -v grep
ps <whichever ps args you like best> | grep java | grep <uid> | grep -v grep