서비스를 모니터링하고 Linux에서 중지된 경우 다시 시작하는 방법

서비스를 모니터링하고 Linux에서 중지된 경우 다시 시작하는 방법

실제로 쉘 스크립트를 사용해야 하는지, 아니면 이미 몇 가지 방법이 있는지 잘 모르겠습니다. 하지만 우리가 어떤 접근 방식을 사용하든 나는 서비스를 항상 계속 실행하고 싶습니다.

apache2예를 들어 보겠습니다 . 그 다음에 ..

  • 언제든지서비스 apache2가 중지되었거나 실행되고 있지 않습니다. 서비스가 자동으로 시작(또는 다시 시작)되기를 원합니다.
  • 좀 더 쉽게 말하면, 나는서비스항상 작동 중입니다.

(만일 공정한 빈도로 확인해볼 수 있을지도 모릅니다.실시간 확인 중문제입니다. 그러니까 매 5분마다)

내가 생각할 수 있는 유일한 방법은 Cron 탭과 함께 쉘 스크립트를 사용하는 것입니다.

  • 스마트 솔루션이 있나요?

감사해요!

답변1

2018년 3월 업데이트

이 답변은 이제 꽤 오래되었으며, 작성된 이후 systemd가 Linux에서의 pid1 전쟁에서 승리했습니다. 따라서 아마도체계화된단위, systemd가 배포판에 내장된 경우(대부분).

아래 답변은 후손을 위해 보존됩니다.


위의 monit 답변은 유효하지만 몇 가지 대안을 언급하고 싶다고 생각했습니다.

운영 체제가 이미 프로세스 관리 문제를 해결했다는 점을 명심할 가치가 있습니다. 전통적으로 Linux는 기본적으로 init.d에 표시되는 스크립트 모음인 sysvinit를 사용했습니다. 그러나 이는 매우 멍청하고 프로세스를 모니터링할 수 없으며 init.d 스크립트가 복잡하고 정당한 이유로 대체되고 있습니다.

보다 현대적인 운영 체제가 sysvinit를 대체하기 시작했으며 선두 주자는 Upstart 및 Systemd입니다. Debian은 systemd 쪽으로 기울고 있고 Ubuntu는 개발되어 이미 Upstart로 전환했으며 Debian Redhat/CentOS/Fedora도 systemd 쪽으로 움직이고 있습니다. 따라서 이미 sysvinit를 대체한 OS를 사용하는 경우 내장된 OS를 사용하는 것이 좋습니다. 스크립트는 init 스크립트보다 작성하기가 훨씬 쉽습니다.

나는 runit을 사용했고 꽤 좋아했지만 사용하기 가장 쉬운 것은 감독자입니다. 또한 매우 잘 문서화되어 있으며 거의 ​​모든 곳에서 작동하며 모든 주요 배포판에 패키지되어 있습니다.

하지만 무엇을 하든, 제발, 제발, 쉘 스크립트를 사용하지 마세요. 그 접근 방식에는 잘못된 점이 너무 많습니다!

답변2

iptables실제로 실행 중인 서비스나 데몬이 아니라 커널의 일부이기 때문에 좋지 않은 예입니다. 실제로 "중지"할 수는 없으며 iptables구성만 제공할 수 있으며 "중지"하려면 빈 구성을 제공해야 합니다. 실제로 Linux 시스템이 충돌했지만 를 사용하는 포트 전달 설정은 iptables계속 작동합니다.

어쨌든, 유틸리티는monit당신이 원하는 것을 할 것입니다. 데비안을 사용하고 있다면 그것은 멀리 apt-get install monit떨어져 있습니다. 배우기에는 약간 복잡하지만 매우 유연합니다.

답변3

이 간단한 스크립트를 사용하여 경고를 만들고 서비스가 실행되고 있지 않은 경우 서비스를 시작합니다. 더 많은 서비스도 추가할 수 있습니다.

 file name: uptime.sh

 #!/bin/bash
 #service monitoring
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^80$ > /dev/null   2>/dev/null
 a=$(echo $?)
 if test $a -ne 0
 then
 echo "http service down" | mail -s "HTTP Service DOWN and restarted now" root@localhost
 /etc/init.d/httpd start > /dev/null 2>/dev/null
 else
 sleep 0
 fi
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^53$ > /dev/null   2>/dev/null
 b=$(echo $?)
 if test $b -ne 0
 then
 echo "named service down" | mail -s "DNS Service DOWN and restarted now" root@localhost
 /etc/init.d/named start > /dev/null 2>/dev/null
 else
 sleep 0
 fi

 Cron setup:
 */5 * * * * /root/uptime.sh > /dev/null 2>/dev/null

답변4

init/svc 감독의 긴 목록에 추가하기 위해 S6의 하위 디렉토리로 s6 서비스 관리 및 로그인을 빠르고 가볍고 사용자 친화적인 방식으로 처리하는 블록에 새로운 자식인 66이 있습니다. 이것은 Obarun-Linux의 공식 문서에 대한 링크입니다.https://web.obarun.org/software

이것은 이 66 소프트웨어를 사용하고 s6을 이해하는 방법에 대한 FAQ입니다.http://sysdfree.wordpress.com/266

안정적인 릴리스에서는 4.20-->5.0의 커널 변경과 관련된 버그가 하나만 발견되었기 때문에 보고된 다른 모든 문제는 사람들이 새로운 것을 배우는 것과 관련이 있었습니다. 서비스 관리가 이보다 더 단순해져야 한다면 ms-windows로 전환하는 것이 더 나을 수도 있습니다(Linus는 금지). 실제 생활에서 이것이 어떻게 작동하는지 보려면 Obarun live.iso를 다운로드하여 가지고 놀면 됩니다. 서비스 설치 및 66개 스크립트를 통해 서비스 활성화, 종료, 로그 보기, 중지 및 시작(활성화된 동안), 서비스를 트리로 묶고 서비스 트리를 모두 함께 시작 및 중지하고 사용자 수준 서비스를 별도로 보유 시스템에서. 이는 s6의 기능을 잘 수행하고 사용자가 s6에서 방탄 시스템을 더욱 쉽게 활용할 수 있도록 해줍니다.

이미지 다운로드는 여기에서 찾을 수 있습니다:https://web.obarun.org/index.php?id=74 md5 검사 파일https://repo.obarun.org/iso/

초기화 및 서비스 관리 외에 s6/66은 시스템의 다른 어떤 것에도 종속성이 없습니다. 이는 나머지 소프트웨어가 자체적으로 작동하도록 init/svc-mgmt를 남겨두는 기본 시스템의 계층입니다. 모든 s6 및 66은 C로 작성되었으며 Linux 전용이나 glibc 전용이 아닙니다. Skarnet(s6 작성자) 서버는 musl 맞춤형 구축 시스템에서 많은 중단 없이 거의 10년 동안 실행되어 왔습니다. Alpine, Void 및 Adelie도 현재 리포지토리에 s6 소프트웨어를 보유하고 있으며 Adelie는 기본적으로 서비스 감독을 위해 이를 사용합니다. Void에는 이제 66도 포함됩니다. 누군가가 s6을 xxBSD나 다른 xxIX 시스템으로 포팅했는지 여부와 그 범위까지 확장했는지는 알 수 없습니다.

관련 정보