php调用Linux命令成功执行但函数不返回[已解决]
昨天实验室开发的网络存储系统遇到了一个的BUG。 【问题描述】 php通过exec函数调用Linux命令service smb restart(重启Samba服务),以前都是正常重启后exec函数立即返回状态码0,但昨天底层正常重启后exec函数却迟迟不返回,从而导致程序执行到这儿就卡住
昨天实验室开发的网络存储系统遇到了一个的BUG。
【问题描述】
php通过exec函数调用Linux命令"service smb restart"(重启Samba服务),以前都是正常重启后exec函数立即返回状态码0,但昨天底层正常重启后exec函数却迟迟不返回,从而导致程序执行到这儿就卡住了。
【解决思路】
(1)一开始我在想是什么导致samba服务无法正常重启,经过进一步的实验发现,通过我们的网络存储系统,samba服务关闭操作是可以正常执行的,但开启和重启操作都无法正常执行。另外,从底层Linux系统控制台上直接执行开启和重启服务的命令都是可以正常的执行并返回。所以基于以上实验现象,我猜想问题可能跟php和samba服务相关的权限有关。随后我查看了samba的配置文件、目录权限,以及与samba相关的用户权限管理工具openldap,都未发现明显问题(不排除有遗漏的地方)。
(2)后来,我就想到之前用过的expect脚本,可以监控一条命令执行的时间并在超时后强行终止。将samba服务重启命令用expect脚本封装并设置timeout后,单独运行该脚本是可以在指定的timeout后强行返回,但我们的网络存储系统执行该脚本时还是无法正常返回。
(3)最后,我就想到从exec函数本身入手,经调研,最终改用proc_open和proc_close函数(打开和关闭一个进程通道)来达到php异步执行Linux命令的目的,具体的php代码如下:proc_close(proc_open("service smb restart", $output, $ret));
到此,昨天的BUG算是绕过去了,但具体为什么会出现这个问题我还是不太明白,若是有朋友遇到过类似的状况也请交流一下经验~

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

Linux 시스템의 5 가지 기본 구성 요소는 다음과 같습니다. 1. Kernel, 2. System Library, 3. System Utilities, 4. 그래픽 사용자 인터페이스, 5. 응용 프로그램. 커널은 하드웨어 리소스를 관리하고 시스템 라이브러리는 사전 컴파일 된 기능을 제공하며 시스템 유틸리티는 시스템 관리에 사용되며 GUI는 시각적 상호 작용을 제공하며 응용 프로그램은 이러한 구성 요소를 사용하여 기능을 구현합니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

Laravel을 설치하려면 다음 단계를 순서대로 수행하십시오. Composer 설치 (MacOS/Linux 및 Windows) 설치 LARAVEL 설치 프로그램 새 프로젝트 시작 서비스 액세스 애플리케이션 (URL : http://127.0.1:8000) 데이터베이스 연결 (필요한 경우)을 설정하십시오.

Linux는 풍부한 도구와 커뮤니티 지원을 제공하는 기본 플랫폼이기 때문에 Docker는 Linux에서 중요합니다. 1. Docker 설치 : Sudoapt-Getupdate 및 Sudoapt-GetInstalldocker-Cedocker-Ce-clicotainerd.io를 사용하십시오. 2. 컨테이너 생성 및 관리 : Dockerrun-D-Namemynginx-P80 : 80nginx와 같은 Dockerrun 명령을 사용하십시오. 3. Dockerfile 쓰기 : 이미지 크기를 최적화하고 다단계 구성을 사용하십시오. 4. 최적화 및 디버깅 : DockerLogs 및 Dockerex를 사용하십시오
