Swoole을 사용하여 서버를 작성했는데 서버에 데몬으로 걸어놓고 계속 실행할 예정입니다. 이렇게 하면 오류로 인해 예기치 않게 종료된 후 최대한 빨리 스크립트를 다시 시작할 수 있습니다. 이것?
답글 내용:
Swoole을 사용하여 서버를 작성했는데 서버에 데몬으로 걸어놓고 계속 실행할 예정입니다. 이렇게 하면 오류로 인해 예기치 않게 종료된 후 최대한 빨리 스크립트를 다시 시작할 수 있습니다. 이것?
linux nohup 명령은 이 PHP 스크립트를 실행한 다음 이 스크립트의 실행 상태를 모니터링하기 위해 셸을 작성합니다. 스크립트가 종료되면 다시 시작하세요.
영원히 실행될 수 있도록 스크립트를 while(1)과 같은 루프로 작성하기만 하면 됩니다.
이 스크립트 헤더에서 이 판단은 이 스크립트에 대한 프로세스가 이미 있으면 바로 종료하고 프로세스가 없으면 실행합니다.
이 PHP 스크립트를 1분마다 실행하는 것과 같은 또 다른 Linix 예약 작업을 작성합니다.
스크립트를 한 번 실행한 후에도 예약된 작업은 1분마다 스크립트를 실행합니다. 스크립트가 종료되면 바로 종료됩니다.
php 스크립트를 작성합니다. 정기적으로 메모리 사용량을 확인하고 핵심 로직을 작성하지 않는 것이 좋습니다. 이는 사업과 관련이 있습니다.
<code>if(memory_get_usage()>100*1024*1024){ exit(0);//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端 }</code>
php 파일의 경로가 /root/run.php
터미널을 엽니다
<code>setsid php /root/run.php > /dev/null &</code>
프로세스가 존재하지 않을 때 자동으로 다시 시작하도록 프로세스 모니터링 스크립트를 편집하세요. /root/monitor.sh
<code>#!/bin/bash alive=`ps aux|grep root\/run|grep -v grep|wc -l` if [ $alive -eq 0] then php /root/run.php > /dev/null & fi</code>
예약된 작업 추가(1분마다 감지)
<code>crontab -e * * * * * /root/monitor.sh > /dev/null &</code>
핸드메이드
간단하고 안정적인 쉘 스크립트를 사용하여 갑자기 종료될 수 있는 PHP 서비스를 보호하세요
/etc/rc.local에 부팅 명령을 추가합니다:
<code>nohup /path/to/swoole.sh >>/path/to/swoole.sh.log 2>&1 &</code>
swoole.sh 내용은 다음과 같습니다.
<code>#!/bin/sh PREFIX=/home/eechen INTERVAL=1 nohup php ${PREFIX}/swoole.php >>${PREFIX}/swoole.log 2>&1 & echo $! > ${PREFIX}/swoole.pid while [ 1 ]; do if [ ! -d /proc/`cat ${PREFIX}/swoole.pid` ]; then nohup php ${PREFIX}/swoole.php >>${PREFIX}/swoole.log 2>&1 & echo $! > ${PREFIX}/swoole.pid echo 'NEW_PID:'`cat ${PREFIX}/swoole.pid && date '+%Y-%m-%d %H:%M:%S'` fi sleep ${INTERVAL} done</code>
그 중:
<code>nohup 表示忽略SIGHUP信号(编号1),比如退出终端时发送的SIGHUP信号(kill -SIGHUP PID)会被忽略掉. >>${PREFIX}/swoole.log 表示把标准输出重定向(>>表示追加,>表示覆盖)到文件swoole.log 2>&1 表示将标准错误(2:stderr)重定向到标准输出(1:stdout). 结尾加上&表示将命令放入后台运行. $! 表示前面运行在后台的PHP进程PID.</code>
즉, swoole.sh는 /proc/PID 디렉터리가 존재하는지 1초마다 확인합니다. 존재하지 않으면 서비스를 다시 시작합니다.
swoole.sh.log는 서비스가 다시 시작되는 시간을 기록합니다.
swoole.log는 서비스 자체의 출력을 기록합니다.
예를 들어 Shell을 사용하여 vmstat를 보호합니다.
<code>vmstat.sh #!/bin/sh PREFIX=/home/eechen INTERVAL=1 nohup vmstat 1 >>${PREFIX}/vmstat.log 2>&1 & echo $! > ${PREFIX}/vmstat.pid while [ 1 ]; do if [ ! -d /proc/`cat ${PREFIX}/vmstat.pid` ]; then nohup vmstat 1 >>${PREFIX}/vmstat.log 2>&1 & echo $! > ${PREFIX}/vmstat.pid echo 'NEW_PID:'`cat ${PREFIX}/vmstat.pid && date '+%Y-%m-%d %H:%M:%S'` fi sleep ${INTERVAL} done #运行 nohup /home/eechen/vmstat.sh >>/home/eechen/vmstat.sh.log 2>&1 & #杀死,可以看到vmstat被重启 kill `cat /home/eechen/vmstat.pid`</code>
이 vmstat.sh 스크립트는 PHP에서도 구현할 수 있습니다.
<code>nohup php /home/eechen/vmstat.php >>/home/eechen/vmstat.php.log 2>&1 & <?php $prefix = '/home/eechen'; $interval = 1; shell_exec("nohup vmstat 1 >>$prefix/vmstat.log 2>&1 & echo $! > $prefix/vmstat.pid"); while ( 1 ) { if ( !file_exists('/proc/'.trim(file_get_contents("$prefix/vmstat.pid"))) ) { shell_exec("nohup vmstat 1 >>$prefix/vmstat.log 2>&1 & echo $! > $prefix/vmstat.pid"); echo 'NEW_PID:'.trim(file_get_contents("$prefix/vmstat.pid")).' '.date('Y-m-d H:i:s'); } sleep($interval); }</code>
1. crontab이 있어야 합니다. 1분마다 존재하는지 확인합니다(ps -ef | grep..). 종료되면 실행 중이었던 프로세스를 생성하고 실행합니다.
3. crontab 스크립트는 실행 중인 프로세스의 상태를 감지할 수 있습니다. 문제가 있거나 계속 대기하거나 응답이 없거나 다른 문제가 있는 경우 직접 종료하고 다시 시작해야 합니다.
Linux 셸 실행

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi

phpisusedforendingemailsduetoitsbuitsbuitsbuit-inmail () functionandsupportivelibraries lifephpmailerandswiftmailer.1) usethemail () functionforbasicemails, butithaslimitations.2) EmployPhpmailerforAdvancedFeatirehtMailsAndAtachments.3))

의존성 (di) inphpenhancescodeflexibility 및 testability는 theiredections 의존성에 대한 classessecouplassessecouplesseviaconstructors, useconstructorinjectionsforpostforpost-creationdencecanchanges, t

간단한 프로젝트에는 Pimple이 권장되며 Symfony의 종속성은 복잡한 프로젝트에 권장됩니다. 1) Pimple은 단순성과 유연성으로 인해 소규모 프로젝트에 적합합니다. 2) Symfony의 종속성 주입은 강력한 기능으로 인해 대규모 프로젝트에 적합합니다. 선택할 때 프로젝트 규모, 성능 요구 사항 및 학습 곡선을 고려해야합니다.

의존성 (di) inphpisadesignpatternwhereclassdectionsearepassedtoittratherthathertancreatedincreatedincreatedincreatedincreatedincreatedincreatedincecreatedincecreatedince.itimprovessoftwarequalityby : 1) 향상된 testability througheasydectionmocking, 2) lextibility oca


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경