Shell 스크립트를 사용하여 특정 프로세스를 모니터링하고, 실행되지 않았을 때 자동으로 시작하는 방법에 대해 알아보겠습니다.
이 스크립트는 특히 주기적으로 실행되어야 하는 백그라운드 프로세스 관리에 유용합니다.
스크립트 소개
1. 다음은 프로세스를 체크만하는 스크립트 입니다.
#!/usr/bin/zsh
checkProcess() {
local processName=$1
local processPidCnt=$(ps -ef | grep "$processName" | grep -v grep | wc -l)
local processPid=$(ps -ef | grep "$processName" | grep -v grep | awk '{print $2}')
echo "$processName pid count is $processPidCnt"
if [ $processPidCnt -gt 0 ]; then
echo "$processName is running"
echo "$processName running on $processPid"
else
echo "$processName is dead"
fi
}
checkProcess "hashtagAlgotithmMiner.py"
checkProcess "recommendAlgorithmMiner.py"
2. 다음은 프로세스를 체크하고 필요시 실행까지하는 스크립트입니다:
#!/usr/bin/zsh
check_and_run_process() {
local processName=$1
local scriptPath=$2
local processPidCnt=$(ps -ef | grep "$processName" | grep -v grep | wc -l)
local processPid=$(ps -ef | grep "$processName" | grep -v grep | awk '{print $2}')
echo "$processName pid count is $processPidCnt"
if [ $processPidCnt -gt 0 ]; then
echo "$processName is running"
echo "$processName running on $processPid"
else
echo "$processName is dead"
echo "Starting $processName"
python3 "$scriptPath" &
echo "$processName has been started"
fi
}
# 사용 예시:
check_and_run_process "hashtagAlgotithmMiner.py" "/Users/data/hashtagAlgotithmMiner.py"
스크립트 설명
이 스크립트는 다음과 같이 동작합니다:
- check_and_run_process 함수는 두 개의 인자를 받습니다:
- processName: 모니터링할 프로세스의 이름
- scriptPath: 실행할 스크립트의 전체 경로
- ps -ef 명령어를 사용하여 현재 실행 중인 프로세스를 확인합니다.
- 지정된 프로세스가 실행 중이면 해당 정보를 출력합니다.
- 프로세스가 실행 중이지 않으면 "dead"라고 표시하고, 지정된 경로의 스크립트를 python3로 실행합니다.
- 스크립트는 백그라운드에서 실행됩니다 (& 기호 사용).
사용 방법
스크립트를 사용하려면 다음과 같이 호출하면 됩니다:
check_and_run_process "hashtagAlgotithmMiner.py" "/Users/data/hashtagAlgotithmMiner.py"
이 명령은 hashtagAlgotithmMiner.py 프로세스를 확인하고, 실행 중이지 않다면 /Users/data/hashtagAlgotithmMiner.py 경로의 스크립트를 실행합니다.
주의사항
- 이 스크립트를 사용하려면 시스템에 python3가 설치되어 있어야 합니다.
- 스크립트 파일에 실행 권한이 있어야 합니다.
- 경로에 공백이 있는 경우, 따옴표로 묶어주는 것이 좋습니다.
결론
이 스크립트를 사용하면 중요한 백그라운드 프로세스가 항상 실행되도록 보장할 수 있습니다. cron job이나 다른 스케줄러와 함께 사용하면 정기적으로 프로세스 상태를 확인하고 필요시 자동으로 재시작할 수 있습니다.