내 서버를 위한 작은 제어판을 개발 중입니다. 실행 중인지 중지되었는지 확인하는 명령이 필요합니다 httpd
.
다른 서비스에도 동일한 코드가 사용될 수 있습니다.
답변1
대부분의 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의 다양한 방법
보다 일반적인 서비스 관리 프레임워크를 사용하는 경우 다음 방법을 사용하여 각 프레임워크의 서비스를 나열할 수 있습니다.
시스템 초기화
$ 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
인용하다
답변2
대부분의 사람들은 init 시스템(Apache, Nginx 등)을 통해 httpd를 실행합니다. 패키지에서 설치한 경우에는 거의 확실합니다. 거의 모든 초기화 시스템에는 런타임에 올바르게 작동하는 메서드가 있습니다. 제 경우에는 SysV 스타일 초기화 스크립트를 제공하고 status
다음과 같은 매개변수를 허용하는 nginx를 사용합니다.
$ /etc/init.d/nginx status
* nginx is running
분명히 다른 httpd, 스크립트 또는 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
응답 코드("A-Okay!"의 경우 200)만 보고 있지만 출력을 드릴다운하고 실제로 테스트하여 올바르게 생성되었는지 확인할 수 있습니다.
하지만 이마저도 그렇게 철저하지는 않습니다. 확인해 보니 localhost
결과가 200인데 문제가 있는 걸까요? 비버가 httpd(시스템의 나머지 부분은 아님)에 전원을 공급하는 네트워크 케이블을 씹었다면 어떻게 될까요? 그리고 뭐? ! 실제 가동 중지 시간이 발생하면 가동 시간을 보고합니다. 잘못된 상태 데이터보다 더 비전문적으로 보이는 것은 없습니다.
이제 외부 서버(바람직하게는 완전히 다른 연결, 멀리 떨어진 다른 은하계)와 대화하고 서버에 쿼리하도록 요청해 보겠습니다.
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
지금까지 보고된 모든 문제는 앱 내 문제(자체 오류 처리 및 보고 기능이 있을 수 있음)이거나 클라이언트측 문제입니다.
이러한 테스트를 조합하면 문제를 식별하는 데 도움이 될 수도 있습니다.