FIND=`ssh -n -p $port $ip find ${PATH} -name "*.[파일형식]"`
if [ -n "${FIND}" ]; then
PREV_PID=`ssh -n -p $port $usr@$ip cat ${FIND}` # pid #74535
CHECK_STAT=`ssh -n -p $port $usr@$ip ps -f ${PREV_PID} | awk 'NR == 2 {print $7}'` # bash: /proc/74535: 파일이 존재하고 디렉토리인 경우
echo "${target} CHECK_STAT : "${CHECK_STAT}""
# pid 문자열이 존재하고 pid의 STAT이 D, T, X, Z 로 시작하지 않고 STAT이 공백이 아니면
# STAT : D -> 입출력 대기로 깨울 수 없는 수면 상태
# STAT : T -> 일시 정지
# STAT : X -> 사망
# STAT : Z -> 프로세스 작동이 잘못되어 죽은 좀비 상태
if [[ -n "${PREV_PID}" ]] && [[ "${CHECK_STAT}" != "D"* && "${CHECK_STAT}" != "T"* && "${CHECK_STAT}" != "X"* && "${CHECK_STAT}" != "Z"* ]] && [[ -n "${CHECK_STAT}" ]]; then
echo "process exists"
else
send_message
fi
ps -f $pid 의 STAT 부분에서 pid의 상태를 체크할 수 있다.
상태가
STAT : D -> 입출력 대기로 깨울 수 없는 수면 상태
STAT : T -> 일시 정지
STAT : X -> 사망
STAT : Z -> 프로세스 작동이 잘못되어 죽은 좀비 상태
가 아니라면 살아 있는 것으로 체크할 수 있다.
혹은 명령어에 pid파일을 남기는 것이 명시되어 있을 경우
$pid에 파일 경로를 담고 grep으로 해당 pid가 담긴 명령어가 실행 중인지 체크할 수 있다.
pids=`ssh -n -p $port $ip ps -aux | grep $pid | wc -l`
if [ $pids -gt 0 ]; then
echo "file exists"
else
send_message
fi
'개발 > Bash, Shell Script' 카테고리의 다른 글
쉘 스크립트에서 와일드카드(*) 써서 파일 찾기 (0) | 2021.11.12 |
---|---|
30일이 지나면 엘라스틱서치 인덱스 삭제하기 (0) | 2021.11.04 |