모든 Linux 시스템에서 watchdog을 활성화할 수 있습니까?

모든 Linux 시스템에서 watchdog을 활성화할 수 있습니까?

안에오렌지 파이 제로Raspbian 서버를 실행할 때 간단히 루트로 명령을 실행하면 감시 기능을 쉽게 사용할 수 있습니다 echo 1 > /dev/watchdog. 이 명령을 잠시 동안 실행하면 시스템이 확실히 재부팅되므로 시스템을 켜진 상태로 유지하려면 이 명령을 주기적으로 반복해야 한다는 생각입니다. 루트 ID를 사용하여 감시 장치를 구현 cron하고 시작 시 다음 스크립트를 실행하도록 할 수 있습니다.

#!/bin/bash
while [ true ]; do
    echo 1 > /dev/watchdog
    sleep 5
done

이 스크립트는 Orange Pi Zero에서 제대로 실행되지만 Ubuntu 18.04를 실행하는 데스크탑 컴퓨터에서는 다음 명령이 실행됩니다.echo 1 > /dev/watchdog 전혀 작동하지 않습니다.Linux를 실행하는 모든 장치에서 워치독을 활성화할 수 있습니까?

답변1

감시 장치에는 하드웨어와 소프트웨어라는 두 가지 유형이 있습니다. Orange Pi에서 SOC 칩은 하드웨어 감시 기능을 제공합니다. 초기화된 경우 자주 ping을 수행해야 하며, 그렇지 않으면 보드 재설정이 수행됩니다.

그러나 하드웨어 감시 기능을 갖춘 데스크톱은 많지 않으므로 커널에서 소프트웨어 버전을 제공합니다. 이제 커널은 추적을 시도하고 강제로 재부팅을 시도합니다. 커널 자체가 손상되면 아무것도 재설정을 트리거하지 않기 때문에 이는 하드웨어 감시보다 열등합니다. 하지만 작동합니다.

소프트웨어 워치독은 softdog모듈을 로드하여 초기화할 수 있습니다.

% modprobe softdog
% dmesg | tail -1
[  120.573945] softdog: Software Watchdog Timer: 0.08 initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0)

기본적으로 60초의 시간 초과가 있음을 알 수 있습니다.

내가 그렇게 하면

% echo > /dev/watchdog
% dmesg | tail -1
[  154.514976] watchdog: watchdog0: watchdog did not stop!

워치독이 시간 초과되지 않는 것을 볼 수 있습니다.

그런 다음 기계를 1분간 유휴 상태로 두고 콘솔에서 확인했습니다.

[  214.624112] softdog: Initiating system reboot

운영 체제가 다시 시작됩니다.

답변2

systemd를 사용하는 최신 Linux 운영 체제에서는 하드웨어 감시를 직접 실행하거나 별도의 사용자 공간 데몬을 사용하는 대신 사용자를 대신하여 하드웨어 감시와 상호 작용하도록 systemd를 구성할 수 있습니다.

RuntimeWatchdogSecsystemd 구성 파일에 (양수) 값을 설정하면 됩니다 /etc/systemd/system.conf.

답변3

이는 하드웨어에 따라 다릅니다. 최신 Linux 커널과 Intel CPU를 사용하여 Ubuntu나 다른 Debian 변형을 실행하는 경우 다음을 수행할 수 있습니다.

  1. sudo apt install watchdog

  2. sudo nano -w /etc/default/watchdog 예를 들어 올바른 모듈을 정의합니다 watchdog_module="iTCO_wdt"(올바른 드라이버 이름은 하드웨어에 따라 다르지만 지난 10년 동안 만들어진 Intel CPU에는 이 정도면 충분합니다). Watchdog 서비스가 시작되면 /dev/watchdog장치가 시스템에 나타나도록 이 커널 모듈을 로드합니다.

  3. sudo nano -w /etc/watchdog.conf 이 줄의 주석을 해제 watchdog-device = /dev/watchdog하거나 파일에 추가 줄로 추가하세요. 최종 결과는 다음과 일치해야 합니다.

     $ grep -vE '^(#|$)' /etc/watchdog.conf
     watchdog-device = /dev/watchdog
     realtime        = yes
     priority        = 1
    
  4. sudo systemctl enable --now watchdog

가능한 모든 감시 드라이버 모듈은 다음 명령을 사용하여 나열할 수 있습니다.

ls "/lib/modules/$(uname -r)/kernel/drivers/watchdog"

어떤 것을 사용해야 할지 모르겠다면 하나씩 테스트해 보세요. 예를 들어, 드라이버를 테스트하려면 sp5100_tco.ko실행 sudo modprobe sp5100_tco한 다음 실행하여 sudo wd_identify드라이버가 하드웨어를 지원하는지 확인하세요. 그래도 작동하지 않으면 드라이버를 제거 sudo modprobe -r sp5100_tco하고 다른 드라이버로 다시 시도하십시오. Watchdog 프로세스는 하드웨어에 연결되어 있으면 사용할 수 없으므로 wd_identifyWatchdog이 활성화된 경우에는 사용할 수 없습니다.

워치독 하드웨어를 테스트하려면 아무 것도 쓰지 않고 장치를 켜기만 하면 인간 오류가 발생할 수 있습니다. 예를 들어, watchdog마지막 단계에서 서비스를 활성화하기 전에 서비스를 실행하기만 하면 sudo cat /dev/watchdog약 60초 후에 시스템이 자동으로 재설정됩니다. 이는 감시 드라이버가 파일이 열릴 때 감시 타이머를 시작하여 작동하고 타이머를 재설정하는 유일한 방법은 드라이버 장치에 무언가를 쓰는 것이기 때문에 작동합니다. 파일을 닫으면 재부팅을 유발하는 대신 타이머도 중지됩니다(커널이 기본이 아닌 플래그로 컴파일되어 부팅 후 감시 장치가 전혀 사용되지 않더라도 재설정이 발생할 수 있는 경우 제외). 드라이버 파일을 실행하면 cat파일이 열리고 cat프로세스가 파일 읽기 시도를 중지하며 타이머가 만료되면(기본적으로 60초임) 하드웨어 재설정이 완료됩니다. 이 작업을 시도하기 전에 모든 작업을 저장하고 파일 시스템을 동기화하는 것이 좋습니다!

커널 감시 드라이버에 대한 자세한 내용은 다음을 참조하세요.공식 커널 문서.

답변4

쓰기 시 I/O가 리디렉션됩니다 1. 감시 장치 구성 방법에 따라 파일 핸들을 닫으면 감시가 비활성화될 수도 있습니다.

노력하다

exec 3>/dev/watchdog
echo 1 >&3

이렇게 하면 현재 셸에서 감시 장치가 열린 상태로 유지되므로 타이머가 중지되지 않습니다.

대부분의 사람들은 cron을 사용하는 대신 전용 감시 데몬을 실행합니다. 이 데몬은 타이머를 재설정하기 전에 일련의 검사를 실행하므로 테스트가 실패하면 시스템도 다시 시작됩니다. 이는 데이터베이스 서비스가 실제로 쿼리를 처리하고 있는지 확인하는 데 사용할 수 있는 반면, 일반 서비스 모니터링은 프로세스가 실행 중인지만 확인합니다.

관련 정보