Linux에서 실패시 서비스를 자동으로 다시 시작하는 방법


23

Windows에서는 서비스가 실패 할 때 발생하는 상황을 설정할 수 있습니다. Linux (특히 CentOS)에서 동일한 것을 달성하는 표준 방법이 있습니까?

내 질문의 더 큰 부분은 TIME_WAIT, FIN_WAIT1 등의 상태에서 열린 상태로 유지 된 소켓을 어떻게 처리합니까?입니다.

현재 개발중인 서비스가 충돌하는 경우 소켓이 청취 포트를 지우거나 변경하기를 기다려 수동으로 다시 시작해야합니다.

당신의 도움을 주셔서 감사합니다.

답변:


26

monit실패했을 때 서비스를 모니터링하고 다시 시작하는 좋은 방법입니다. 아마도 다른 필수 서비스 (예 : Apache)에이 서비스를 사용하게 될 것입니다. 있다 nixCraft에 좋은 기사 있지만, 특별히 서비스를 위해이를 사용하는 방법을 자세히 monit자체가이 이상으로 더 많은 기능을 가지고는.

소켓 측면에서 @galraen 은이 지점에 대답했습니다.


내가 어떤 결정을 내려야 부끄러운 대답. 두 가지 별도의 질문을했습니다. @gelraen 귀하의 답변은 방금 솔루션 검색을 끝내 었습니다. 정말 고마워요 ! @Redmumba 감사합니다, Monit이 좋아 보입니다!
Pryo

당신은 올바른 확실히 표시하기로 결정 어느 하나 upvote에 @ gelraen의 답변을. 정확하고 유익한 정보를 제공합니다.
Andrew M.

19

서비스 재시작 부분에만 응답합니다. 나는 Monit도 보았지만 CentOS 7에서는 systemd가 모든 것을 처리합니다. 이 두 줄을 .service 파일에 추가하면됩니다 (아직없는 경우).

Restart=always
RestartSec=3

참조 https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/를 참조하십시오.

사용자 지정 시스템 서비스를 만들려면 자체 서비스 파일을 작성하는 것이 매우 간단합니다. 사용자 정의 http 서버에 대해서는 아래 예를 참조하십시오.

새 서비스 파일을 사용하여 편집기를 시작하십시오.

vim /etc/systemd/system/httpd.service

필요에 따라 편집 할 수있는 다음 컨텐츠를 추가하십시오.

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

부팅시 자동으로 시작되기를 원합니다.

systemctl enable httpd

시스템에 변경 사항을 알려주고 서비스를 시작하십시오.

systemctl daemon-reload
systemctl start httpd

이제 상태를 확인할 수 있습니다.

systemctl status httpd

자세한 내용은 https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/을 참조 하십시오.


그렇습니다 systemd. 가장 널리 사용되는 배포판 의 표준 서비스 관리자 가 바로 그렇게 할 수 있습니다.
Rolf

13

setsockopt(2)으로 청취 소켓을 호출 할 수 SO_REUSEADDR있으므로 bind(2)모든 연결이 만료되기를 기다리지 않고 다시 소켓을 사용할 수 있습니다 . 또 다른 가능성은 커널에서 연결을 삭제하는 것입니다. FreeBSD는 tcpdrop이것에 대한 명령을 가지고 있으며 Linux에 대해 모른다.


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