Linux
[PHP¢OS] PHP exec() 함수로 아파치 restart 하기
- 2022.04.15 14:42:48
PHP를 통해 Linux(CentOS)의 apache 데몬을 graceful 혹은 restart 해야 하는 상황이 생겼다. 기본적으로 별도의 리눅스 sudo 설정을 하지 않았다면, PHP의 exec() 이나 shell_exec() 함수를 통한 리눅스 명령어 엑세스는 디렉터리를 조회하는 등의 일반 user 에게 부여되는 엑세스만 가능하다. apache 등의 데몬을 제어하기 위해선 sudo 설정을 통해 일부 명령어에 root 권한을 부여해야 한다. [!]visudo 설정하여 외부 exec() 권한 부여[/!] (CentOS 7.*를 기준으로 한다.) #visudo
로 sudo 설정파일을 연다. ( #vi sudoers 로 열게 되면 readonly 모드로 열리므로 #visudo 로 열어 수정해야 한다. ) apache ALL=NOPASSWD:/sbin/service
를 추가한다. 가장 앞에 위치한 'apache'의 경우 리눅스 셋팅에 따라 www-data 혹은 nobody 가 되기도 하므로 주의! [!]PHP에서 exec() 으로 apache restart 하기[/!] visudo를 수정 하였기 때문에 /sbin/service 에 apache 에게 root 권한이 부여 되어 웹에서 PHP를 통해 service 제어가 가능해졌다. 아래와 같이 test.php 파일 하나를 만들고 테스트 코드를 작성해 보자. exec("/usr/bin/sudo /sbin/service httpd restart > /dev/null 2>&1 &");
http://domain/test.php 로 접속하게 되면 정상적으로 아파치가 재시작 된 것을 확인해 볼 수 있다. ( > /dev/null 2>&1 & 은 php에서 응답을 기다리지 않고, 백그라운드에서 실행되도록 하는 옵션이다.) |