답변:
일반적 /var/run/
으로 Redhat / CentOS 스타일 시스템 에서 데몬 화 된 프로세스의 PID 파일을 찾을 수 있습니다.
이것의 부족으로, 항상 프로세스 초기화 스크립트를 볼 수 있습니다. 예를 들어 SSH 데몬은의 스크립트로 시작됩니다 /etc/init.d/sshd
. 때때로 PID가 정의 될 것입니다 (pid, PID, PIDFILE, PID_FILE 등 검색).
그러나 RHEL 스타일 시스템의 대부분의 다른 데몬 /etc/init.d/functions
은 몇 가지 일반적인 기능을 위해 스크립트를 소싱합니다 .
# Set $pid to pids from /var/run* for {program}. $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
local base=${1##*/}
local pid_file=${2:-/var/run/$base.pid}
그 소스 /etc/init.d/functions
에 관계없이 PID는 살아있을 것입니다 /var/run/*.pid
.
사용자 지정 응용 프로그램의 경우 PID는 래퍼 스크립트로 정의됩니다 (권장). 내가 아는 대부분의 개발자는 위의 데몬과 동일한 규칙을 따릅니다.
당신이 경우에 할 PID를 파일없이 만남 뭔가를 기억 MONIT뿐만 아니라 프로세스 문자열 된 patern에 모니터링 할 수 있습니다 .
monit procmatch anything
커맨드 라인에서 시도 하면을 얻습니다 monit: invalid argument -- procmatch
. 어떤 아이디어?
monit -V
) 어떤 OS / 배포?
내가 취한 또 다른 접근법 :
임베디드 모드로 실행되는 데이터베이스 서버가 있고 데이터가 포함 된 응용 프로그램 디렉토리 내에 있습니다.
데이터베이스에는 .pid 파일과 같은 것이 있지만 잠금 파일이라고합니다. 이 잠금 파일을 찾기 위해 앱에서 열린 모든 파일을 나열했습니다.
$ ls -l /proc/18264/fd | cut -d'>' -f2
소켓, 파이프, 서버 파일 등을 포함한 긴 목록을 제공했습니다.
$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck
.pid
파일 이있는 것은 아닙니다 . 응용 프로그램 (또는 시작 스크립트)은 명시 적으로 작성해야합니다.