'ps' 명령 가시성에 대한 명령 설명 제공

'ps' 명령 가시성에 대한 명령 설명 제공

따라서 제가 깔끔한 해결책을 찾고 싶은 문제는 서버에 로그인할 때(Solaris 및 RHEL 인스턴스가 일부 있음) 어떤 애플리케이션이 실행되고 있는지 확인하려고 한다는 것입니다.

$ ps -auxww | grep <thing I look for, usually Java>

그리고 프로세스, PID, 추가 세부 정보, 전체 프로세스 이름 및 함께 실행된 매개 변수가 포함된 멋진 목록을 얻습니다. 이 동안일반적으로무엇이 실행되고 있는지 알아내는 데 충분한 정보를 제공하지만 일부 서버는 다르게 실행됩니다. 다양한 목적으로 사용되는 앱 서버의 여러 인스턴스가 있는 서버가 있을 수 있습니다. 다른 프로세스는 내가 혼합한 정지 프로세스의 남은 부분입니다.냉동되지 않은프로세스. 어떤 프로세스를 종료해야 하는지 알 수 없기 때문에 모든 Java 인스턴스를 종료하고 싶지 않습니다.

제가 제공하고 싶은 해결책은 시작 스크립트 중에 간단한 설명을 넣을 수 있는 일부 텍스트를 프로세스 앞에 추가하거나 추가하고 싶습니다. 이렇게 할 수 있는 방법이 있나요?


제가 요구하는 것이 불가능하거나/어리석거나/완전히 엉뚱한 것처럼 들리면, 동일한 작업을 수행할 수 있는 능력을 제공하는 대체 솔루션을 사용할 수 있습니다. 나는 아이디어에 열려 있지만 이것은 실행 가능한 것으로 나타났습니다.

답변1

다음은 예입니다.중력의제안:

$ MARKER=snooze sleep 120&
$ ps ew | grep -o ".*[M]ARKER=snooze"
11741 pts/2    S      0:00 sleep 120 MARKER=snooze

e옵션은 ps프로세스의 환경을 인쇄합니다. 옵션 -o과 정규식을 사용하면 grep우리가 찾고 있는 부분 뒤의 모든 환경을 잘라낼 수 있지만 항상 이렇게 깨끗한 결과를 얻을 것이라고 장담할 수는 없습니다(더 많은 환경이 인쇄될 수 있음). 패턴의 일부를 대괄호 안에 넣으면 사람들이 결과에서 해당 grep -v패턴을 제거하기 위해 for -를 자주 사용하는 기능을 수행합니다.grep

답변2

쉽게 찾을 수 있도록 각 프로세스에 고유한 태그를 지정하고 싶은 것 같습니다. 실제로 대규모 기업의 모니터링 팀에서 그런 작업을 하고 있다는 이야기를 들었습니다. 모든 앱에는 ps 및 grep을 사용하여 쉽게 찾을 수 있는 고유한 코드가 있습니다.

Java에서는 -D를 사용하여 변수를 설정할 수 있으므로 "-Dmonitoringid="와 같은 것을 쉽게 추가할 수 있습니다. 프로세스는 이를 무시하지만 쉽게 찾을 수 있습니다.

또는 제공되는 애플리케이션과 관련된 ID로 각 실행에 앱 서버를 분할할 수 있습니다. 우리는 현재 각 상자에 많은 앱이 있는 대규모 J2EE 앱 서버 팜을 실행하고 있지만 각각은 소유권, 액세스, 제어 등을 분할하기 위해 자체 ID로 실행됩니다.

이는 또한 호스트에서 특정 앱 서버를 찾는 것이 다음과 같이 간단하다는 것을 의미합니다. ps <whichever ps args you like best> | grep java | grep <uid> | grep -v grep

관련 정보