명령 줄을 통해 httpd가 실행 중인지 확인하는 방법은 무엇입니까?


29

서버의 작은 제어판에서 작업하고 있습니다. httpd실행 중이거나 중지 된 경우 명령이 필요합니다 .

다른 서비스에도 동일한 코드를 사용하고있을 것입니다.

답변:


28

대부분의 사람들은 httpd (Apache, Nginx 등)를 init 시스템을 통해 실행합니다. 패키지에서 설치 한 경우가 거의 확실합니다. 이러한 init 시스템의 대부분은 실행중인 메소드 작업이 있습니다. 내 경우에는 SysV 스타일의 init 스크립트를 제공하고 status인수 를 허용하는 nginx를 사용 하고 있습니다.

$ /etc/init.d/nginx status
 * nginx is running

분명히 다른 httpd, script 또는 init 시스템을 실행하는 경우 약간 다른 구문을 사용하지만 수동으로 httpd를 직접 시작하지 않는 한 (세계에서 최악의 생각처럼) 상태를 쿼리 할 수있는 훌륭하고 관리되는 시작 스크립트를 사용하고있을 것입니다.

slm의 답변 에는 이러한 종류의 초기화 쿼리에 대한 자세한 내용이 있지만 신뢰하는 문제는 프로세스가 여전히 실행 중인지 여부 만 알려줍니다. httpd의 기본 프로세스 실행 중일 수 있지만 교착 상태가 발생할 수 있습니다. 간단한 초기화 테스트를 건너 뛰고 행동 테스트로 넘어가는 것이 합리적입니다.

우리가 httpds에 대해 알고있는 것은 그들이 듣는 것입니다. 일반적으로 port *:80에 있지만 그렇지 않은 경우 코드 다음 코드를 조정할 수 있습니다. 여기 에 올바른 포트에서 수신 대기 중인지 확인하기 위해 awk출력을 출력 netstat하고 있습니다.

$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2079/nginx

또한 올바른 httpd가 실행 중인지 확인하기 위해 어떤 프로세스가 실행 중인지 확인할 수도 있습니다 . 우리는 모든 종류의 점검을 할 수 있습니다. 편집증이되고 싶은 방법에 따라 다릅니다 :)

그러나 그것조차도 httpd를 반영합니다. 실제로 테스트하고 싶습니까? 테스트 해보자 .

$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200

방금 응답 코드 (200은 "A-Okay!"를 의미 함)를보고 있지만 다시 출력을 파고 실제로 테스트하여 출력이 올바르게 생성되는지 확인할 수 있습니다.

그러나 이것조차 그렇게 철저하지는 않습니다. 확인 localhost하고 200을보고합니다. 아무것도 없습니다. httpd를 제공하는 네트워크 케이블을 통해 비버가 씹어지면 (시스템의 나머지 부분은 제외) 어떻게해야합니까? 그리고 뭐?! 실제로 다운되었을 때 가동 시간을보고합니다. 잘못된 상태 데이터보다 비전문적 인 것으로 보이는 것은 거의 없습니다.

이제 외부 서버 (이상적으로는 다른 은하계에서 완전히 다른 연결로)와 대화하고 서버에 쿼리하도록 요청하십시오.

$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200

이 시점에서보고 된 문제는 인앱 문제 (자체 오류 처리 및보고가 있거나 클라이언트가 끝났을 수 있음)입니다.

이러한 테스트를 조합하면 문제가있는 위치를 정리하는 데 도움이 될 수 있습니다.


3
httpd는 어떻게 되었습니까?
Creek

@Creek 무슨 뜻인가요?
Oli

4
좋은 답변은 +1이지만 OP가 httpd에 대해 물었고 nginx
Creek

4
@Creek 내 책에서 "httpd"는 "http 데몬, 웹 서버"를 의미합니다. 특정한 것이 아닙니다. 내가 다르게해야한다고 생각하십니까? 먼저 음료를 사지 않아도 더 철저하게 확인할 수 있을지 모르겠습니다.
Oli

3
내가 당신에게 내가 할 것이라고 말한 것에 대해 당신에게 음료를 살 수 있다면, 클래식. 나는 OP가 아파치의 httpd를
Creek

25

대부분의 Linux 배포판에서 보편적으로 services 명령을 사용할 수 있습니다.

$ service <service> status

$ service httpd status
httpd (pid  23569) is running...

이 명령을 개별적으로 실행하는 모든 서비스에 사용하거나 모든 서비스 상태를 찾을 수 있습니다.

$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid  23577) is running...
gpm is stopped
hald is stopped
httpd (pid  23569) is running...
...

서비스 나열을위한 SysVinit, Systemd 및 Upstart 내의 다양한 방법

보다 일반적인 서비스 관리 프레임 워크 중 하나를 사용하는 경우 다음 방법을 사용하여 각각의 서비스를 나열 할 수 있습니다.

SysVinit

$  ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root  1422 Jan 13  2009 ajaxterm
-rwxr-xr-x 1 root root  3052 Apr 20  2012 autofs
-rwxr-xr-x 1 root root  1877 Apr 13  2011 avahi-daemon
-rwxr-xr-x 1 root root  1824 Apr 13  2011 avahi-dnsconfd
-rwxr-xr-x 1 root root  1926 Feb 22  2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19  2011 functions
-rwxr-xr-x 1 root root  1778 Jan  6  2007 gpm
-rwxr-xr-x 1 root root  1586 Mar  5  2011 haldaemon
-rwxr-xr-x 1 root root  5742 Dec 19  2011 halt

체계화

$ systemctl list-unit-files --type=service | head -10
UNIT FILE                                   STATE   
abrt-ccpp.service                           enabled 
abrt-oops.service                           enabled 
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled 
abrt-xorg.service                           enabled 
abrtd.service                               enabled 
accounts-daemon.service                     enabled 
alsa-restore.service                        static  
alsa-state.service                          static  

건방진 녀석

$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting

참고 문헌


이것이 내가 아는 한 정답입니다. 그러나 OP는 다른 하나를 받아 들였다 :)
Ramesh

@Ramesh-괜찮습니다. Oli의 A도 정확합니다. 조금 더 난해합니다.
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.