이 글에서는 Linux 환경에서 PHP 배경 데몬을 구현하는 방법을 소개합니다. 이제 여러분과 공유하겠습니다. 도움이 필요한 친구들은 한 번 살펴보세요
application 시나리오
어떤 경우에는 지속적으로 주기적으로 메모리나 CPU의 실행 상태를 모니터링하는 등 일부 서비스를 제공합니다. 이는 클라이언트(예: 웹 인터페이스, 모바일 앱 등)가 종료된다는 의미는 아닙니다. 메모리나 CPU를 모니터링하지 않는 경우, 이 비즈니스 시나리오를 처리하려면 백그라운드 데몬이 유용할 수 있습니다.
필요환경
Linux
구현방법
[php]1.
/usr/local/src/ 디렉터리에서 다음을 생성합니다. 다음과 같은 새로운 daemon.php 스크립트 파일:
view plain copy
<?php Class Daemon{ /** * 初始化一个守护进程 * @throws Exception */ public function init(){ //创建一个子进程 $pid = pcntl_fork(); if ($pid == -1) { throw new Exception('fork子进程失败'); } elseif ($pid > 0) { //父进程退出,子进程变成孤儿进程被1号进程收养,进程脱离终端 exit(0); } //创建一个新的会话,脱离终端控制,更改子进程为组长进程 $sid = posix_setsid(); if ($sid == -1) { throw new Exception('setsid fail'); } //修改当前进程的工作目录,由于子进程会继承父进程的工作目录,修改工作目录以释放对父进程工作目录的占用。 chdir('/'); /** * 通过上一步,我们创建了一个新的会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免 * 这种情况,我们再次创建一个子进程,并退出当前进程,这样运行的进程就不再是会话组长。 */ $pid = pcntl_fork(); if ($pid == -1) { throw new Exception('fork子进程失败'); } elseif ($pid > 0) { //再一次退出父进程,子进程成为最终的守护进程 exit(0); } //由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符 fclose(STDIN); fclose(STDOUT); fclose(STDERR); } } $daemon = new Daemon(); $daemon->init(); //处理业务代码 while(true) { file_put_contents('/usr/local/src/log.txt', time().PHP_EOL, FILE_APPEND); sleep(5); }
이 스크립트의 기능은 5초마다 로그 파일에 타임스탬프를 기록하는 것입니다. 물론 이는 특정 애플리케이션에서도 특정 비즈니스에 적용됩니다. 처리 코드는 다른 비즈니스에 따라 작성되어야 합니다.[plain]2. 백그라운드에서 PHP 스크립트를 실행합니다.
명령줄에 다음을 입력합니다.
view 일반 복사
nohup php /usr/local/src/daemon.php &
3. 로그 출력 보기[plain]명령줄에 다음을 입력하세요.
view 일반 사본
tail -f /usr/local/src/log.txt
다음 정보가 표시됩니다.
4. 关闭php后台进程
首先,我们需要查出该进程的PID,命令:
[plain] view plain copy
ps -ef | grep "php /usr/local/src/daemon.php"
然后,通过这个PID把该进程kill掉
[plain] view plain copy
kill -9 22767
其中,22767就是php后台进程的PID号。
5. 开机自启
通过前面的步骤,我们知道如何开启和关闭一个php进程,但是,在实际的应用中,我们不可能每次都是手动开启,这样我们就会损失掉一部分业务数据,所以我们必须要让该进程开机自动运行,步骤如下:
在/etc/rc.local文件中,将nohup php /usr/local/src/daemon.php &这个命令加入即可。
相关推荐:
위 내용은 Linux 환경에서 PHP 백그라운드 데몬 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!