실제로 쉘 스크립트를 사용해야 하는지, 아니면 이미 몇 가지 방법이 있는지 잘 모르겠습니다. 하지만 우리가 어떤 접근 방식을 사용하든 나는 서비스를 항상 계속 실행하고 싶습니다.
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 시스템으로 포팅했는지 여부와 그 범위까지 확장했는지는 알 수 없습니다.