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


24

사실 나는 쉘 스크립트를 사용 해야하는지, 이미 어떤 방법이 있는지 확실하지 않습니다. 그러나 우리가 사용하는 방법에 관계없이 항상 서비스를 계속 실행하고 싶습니다.

iptables예를 들어 봅시다 . 그런 다음 ..

  • 때마다iptables 서비스입니다 stopped거나 (즉)이 실행되고 있지, 내가이 원하는 started(또는 restarted자동으로 ..) 가 정지 할 때마다 (또는 실행되지 않음).
  • 다른 간단한 말로, 나는 항상 서비스 를 유지하고 싶다 .

( 실시간 검사를 수행하는 것이 문제가 될 경우 공정한 빈도를 확인해야 할 수도 있습니다. 5 분마다 말하십시오)

내가 생각할 수있는 유일한 방법은 Cron Tab과 함께 Shell Scripts를 사용하는 것입니다.

  • 똑똑한 해결책이 있습니까?

감사!


그렇게하지 말아야합니다. 서비스가 잘못 구성되어 있다고 가정하면 전략에서 달성 할 수있는 것은 무엇입니까? 재 시도의 무한한 목록. 대신 alerts작동하지 않는 crontab 스크립트를 작성해야합니다 .
MariusMatutiae

나는 원래의 질문에 대한 직접적인 해결책에 대해 궁금합니다. 또한, 나는 restarted어떤 이유로 든 중지 될 때마다 단순히 서비스가 필요합니다 . 재시작에 문제가 없습니다.
夏 期 劇場

1
귀하가 제안한 솔루션은 충분히 똑똑합니다. 서비스를 올바르게 사용하는 경우 (서비스가 이미 실행중인 경우 즉시 종료하고, 서비스가 중지되었다고 알리면 서비스를 수정하는 등의 방법을 알려줍니다.) 가장 간단한 방법입니다. 자동으로 중지되는 서비스는 문제가있는 서비스이므로 결국 수정해야합니다. 그러나 임시 패치, cron 스크립트 또는 대부분의 시간 동안 휴면 상태 인 다른 매우 간단한 데몬으로 작업이 제대로 수행됩니다. 이 같은 몇 가지 도구 mmonit.com/monit는 하지만 난 생각 결국 그들은 모두 사용을 비슷한 방식

@MariusMatutiae, 나는 당신의 요점에 동의하지만 그것은 서비스의 성격에 달려 있으며, 대부분의 프로세스 관리자는 여러 번 재시작에 실패한 후 물러납니다. 프로세스가 자연스럽게 종료되고 큐에서 작업을 선택하고 각 실행 후에 종료하는 작업자와 같이 프로세스를 자동으로 다시 시작하는 것이 매우 합리적입니다. 또한 맞춤형 메모리 누수 코드로 고통받는 시스템 관리자를위한 편리한 도구입니다. 프로세스의 수명을 제한하고 손
Alex Forbes

답변:


25

2018 년 3 월 업데이트

이 답변은 이제 꽤 오래되었으며, systemd로 작성된 이후 Linux에서 pid1 전쟁에서 승리했습니다. 따라서, 당신은 아마 만들어야합니다 systemd systemd가 (대부분입니다) 배포판에 내장되어있는 경우, 장치.

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


위의 monit 답변은 유효하지만 대안을 언급 할 것이라고 생각했습니다.

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

보다 현대적인 운영 체제가 sysvinit을 대체하기 시작했으며 프론트 러너는 Upstart 및 Systemd입니다. 데비안은 시스템화를 기대하고 있으며 우분투는 이미 Upstart로 전환했으며 데비안 Redhat / CentOS / Fedora는 시스템화를 향해 가고 있습니다. 따라서 sysvinit을 이미 교체 한 OS를 사용하는 경우 기본 제공 기능을 사용하는 것이 좋습니다. 스크립트는 init 스크립트보다 작성하기가 훨씬 쉽습니다.

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

그러나 무엇을 하든지 셸 스크립트를 사용하지 마십시오. 그 접근 방식에는 너무 많은 문제가 있습니다!


sysvinit로 어떻게합니까?
horseyguy

12

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

MariusMatutiae의 요점은 정확하지만 서버에서 HTTPD 및 DNS 서비스를 모니터링하는 간단한 스크립트를 수행했습니다. 서비스가 중단되면 스크립트가 서비스를 다시 시작하고 알림을 보냅니다. 서비스에 대한 많은 알림 / 메일을 받으면 조사를 수행 할 수 있습니다.
Ranjithkumar T


0

질문을받은 지 몇 년이 지났다는 것을 알고 있습니다. 그러나 systemd (주로 centos 및 REHL에서 사용 가능)를 사용하면 서비스가 다운 된 경우 cron과 함께이 bash 명령을 실행하여 확인하고 다시 시작할 수 있습니다.

#!/bin/bash

service=$@
/bin/systemctl -q is-active "$service.service"
status=$?
if [ "$status" == 0 ]; then
    echo "OK"
else
    /bin/systemctl start "$service.service"
fi

bin 디렉토리에 저장하고 모니터와 같이 이름을 지정하십시오. 적절한 파일 권한을 부여하십시오. 그런 다음처럼 실행하십시오.

sudo monitor redis

redis 서비스를 확인하고 필요한 경우 다시 시작 / 시작하십시오.

마지막으로 이것을 cron 작업에 추가하십시오.

이것이 도움이되기를 바랍니다.


0

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 forbid)로 전환하는 것이 좋습니다. 실생활에서 이것이 어떻게 작동하는지 보려면 Obarun live.iso를 다운로드하고 가지고 놀기만하면됩니다. 서비스와 66 개의 스크립트를 설치하여 활성화, 종료, 로그 확인, 중지 및 시작 (활성화 된 상태), 서비스를 트리로 묶고 서비스 트리를 시작하고 모두 중지, 사용자 레벨 서비스를 별도로 제공 시스템에서. 그것은 s6이 잘하는 일을 수행하고 사용자가 s6 하에서 방탄 시스템을 쉽게 이용할 수있게합니다.

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

초기화 및 서비스 관리 외에도 s6 / 66은 시스템의 다른 항목과는 아무런 관련이 없습니다. 기본 시스템의 계층으로 나머지 소프트웨어는 자체 init / svc-mgmt blind에서 작동합니다. 모든 s6 및 66은 C로 작성되었으며 Linux 또는 glibc에 국한되지 않습니다. Skarnet의 (6 명의 저자) 서버는 musl 맞춤형 시스템에서 많은 일시 중지없이 거의 10 년 동안 실행되었습니다. Alpine, Void 및 Adelie는 현재 리포지토리에 s6 소프트웨어를 가지고 있으며 Adelie는 기본적으로 서비스 감독에이 소프트웨어를 사용합니다. 공허는 이제 66도 운반합니다. 누구든지 s6을 xxBSD 또는 다른 xxIX 시스템으로 이식했는지 여부와 그 확장 성을 모릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.