[Linux] PID 무관하게 프로그램 종료와 백그랴운드 실행
PID 프로세스 ID 값을 저장해서 보통은 같은 프로그램 실행 할때 이전에 실행된 프로그램이 있으면 kill 처리 하면서 다시 실행 시키는데 여기선 PID 값을 저장하지 않고 pkill 프로그램을 이용해서 kill 처리 후 같은 프로그램을 실행 시키는 것에 대한 것입니다.
kill 처리 하지 않고 스케줄에서 일정 시간마다 실행 시키면 이전 프로그램이 종료가 안된 경우는 계속 같은 프로그램이 쌓여서 종국에는 시스템 자원이 고갈되어 서버 죽습니다.
PHP 프로그램에서 출력되는 로그를 호스트명으로 생성하려면,
nohup 명령어와 함께 리다이렉션을 사용 하면 된다.
#!/bin/bash
# 현재 실행 중인 프로세스 확인하고 종료
pkill -f 'tail -f /var/log/message'
pkill -f '/var/lib/php_chk.php real'
# 호스트명으로 로그 파일명 생성
log_file="/path/to/log/$(hostname)_$(date +%Y%m%d%H%M%S).log"
# 새로운 프로세스 실행하고 로그 저장
nohup tail -f /var/log/message | /var/lib/php_chk.php real > $log_file 2>&1 &
위의 스크립트에서, log_file 변수는 로그 파일의 경로와 이름을 저장합니다.
hostname 명령어는 현재 시스템의 호스트명을 출력하고, date +%Y%m%d%H%M%S 명령어는 현재 날짜와 시간을 출력합니다.
따라서, 각 로그 파일의 이름은 "호스트명_날짜시간.log" 형식이 됩니다.
그리고 nohup 명령어 뒤에 있는 > $log_file 2>&1 & 부분은 PHP 프로그램의 표준 출력과 표준 에러를 'log_file' 변수에 저장된 파일에 기록하도록 합니다.
스케줄러에는 아래와 같은 형태로 설정 하면 됩니다.
0 * * * * /path/to/run_process.sh
● 참고