Linux에서 상주 프로세스의 역할은 무시할 수 없지만 그 안에 있는 문제도 무시할 수 없습니다. 프로세스를 시작하는 방법, 프로세스를 종료하는 방법, 프로세스가 종료된 후 프로세스를 다시 시작하는 방법을 적절하게 설계해야 합니다. 쉘 제어 PHP 상주 프로세스의 예를 살펴보겠습니다.
코드 복사 코드는 다음과 같습니다.
#!/bin/sh
#filename test.sh
#파일의 위치를 반드시 찾아주시고 실행디렉토리에 따라 바뀌지 않습니다
cd $(cd "$( dirname "$0")"; pwd)
읽기 전용 경로=$(pwd)/
file=$1;
runfile="${path}data/${file}.run"
diefile="${path}data/ ${file}.die"
readonly file="${path}${file}.php"
if [ ! -f "$file" ]; then
echo "존재하는 파일을 선택하세요"
elif [ ! - f "$runfile" ]; then
#여기서 판단하세요. runfile 파일이 없으면 아래 프로세스를 시작하세요
echo $$>${runfile}
while true
do
if [ ! -f $diefile ]; then
# 여기에 diefile 파일이 없으면 프로그램이 계속 실행된다는 의미이고, 그렇지 않으면 else를 입력하고 종료 작업을 수행한다는 의미입니다. ~ #diefile 파일이 존재하는 경우, diefile로 종료
#runfile이 존재할 때 프로세스를 시작하려는 시도입니다
oldpid=`cat $runfile`
newpid=`ps aux | grep "process.sh $1" | " | awk '{print $2}'`
if [[ $oldpid -eq $newpid ]]; then
# Runfile의 프로세스 번호가 실행 중인 절차적 프로세스 번호와 일치하면 모든 것이 정상임을 나타냅니다^_ ^
echo "the process is running now"
exit
else
# 대상 프로세스가 대상 프로세스라면 해당 프로세스에 문제가 있다는 의미입니다. 실행 파일을 직접 삭제하고 실행 중인 프로세스를 종료합니다. {print $2}' | grep -v $$ | >${path}/data/error
| runfile이 존재하지만 프로세스 번호가 종료 프로세스와 일치하지 않습니다. , 빨간색 else가 실행되는 경우) `grep -v $$`를 사용하여 현재 실행 중인 프로세스를 필터링해야 합니다. 그렇지 않으면 프로세스가 모두 종료되고 다음 프로세스도 실행되지 않습니다. 자동 재시작에 대해 자동 재시작은 특정 상황에 따라 crontab에 배치되고 실행될 수 있습니다.
코드 복사 코드는 다음과 같습니다.
crontab -e
#현재 사용자의 일정을 열고 모드를 추가합니다.
#일정에는 별표 5개가 있습니다. f1, f2, f3, f4, f5,
# 여기서 f1은 분, f2는 시간, f3는 일, f4는 월, f5는 요일을 나타냅니다.
#*는 매 분/시간/일/월/주를 나타내고, */n은 n분/시간/...을 나타냅니다. .한번 실행
*/2 * * * * /root/test.sh
#2분에 한 번씩 실행
이 전체 상주 프로세스 기능이 완료되면 프로세스를 종료하기만 하면 됩니다. 해당 디렉토리 ${diefile}만 터치하세요.
위 내용은 Linux 데몬 프로세스 예제 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!