최근에 홈 서버에 Debian 9를 설치했고 HDD에서 SMART 검사를 실행한 다음 문제가 발생하면 경고를 받고 싶었습니다. 이상적으로는 Slack 인스턴스가 스마트폰에 연결되어 있고 매우 유용하다고 생각하므로 알림이 내 Slack 인스턴스에 들어가도록 하고 싶습니다(이미 UPS에 대한 알림이 있고 핑이 실패함).
smartd/smartctl을 조사해 봤지만 Slack에 알림을 보내는 방법을 찾을 수 없는 것 같습니다.
알림을 처리하기 위해 어딘가에서 bash 스크립트를 호출하고 Slack에 알림을 보내기 위해 다른 (파이썬) 스크립트를 호출할 수 있기를 원합니다.
(편집: 명확히 하기 위해 Slack 알림을 위한 Python 스크립트가 이미 다른 곳에서 사용되므로 괜찮습니다.)
편집하다 아래 두 솔루션 모두 테스트를 거쳤으며 나에게 잘 작동합니다. 어떤 이유로 Slack이 작동하지 않을 경우 나를 보호해주기 때문에 메일+스크립트 솔루션을 선택했습니다. 하지만 둘 다 신뢰할 수 있고 환경 변수를 추가해 준 RalfFriedl에게 감사드립니다.
답변1
# /etc/smartd.conf
/dev/sda -a -m <nomailer> -M exec /my/script
이는 sda
장치당 하나의 행을 추가하는 것입니다. 또는 감지된 모든 장치를 모니터링하려면 /dev/sda
로 바꾸십시오 DEVICESCAN
.
완료될 때까지 /my/script
중단되므로 너무 오래 걸리지 않는지 확인하세요 .smartd
/my/script
다양한 환경 변수를 사용하여 실행됩니다. 찾다. man smartd.conf
예를 들어SMARTD_DEVICE
다른 변수는 다음과 같습니다. " SMARTD_FULLMESSAGE
smartd의 전체 이메일 경고 메시지 문자열 내용으로 설정합니다."
메시징을 테스트하려면 다음 임시 구성 파일로 smartd를 시작하여 테스트 메시지를 보냅니다.
# /etc/smartd.conf
/dev/sda -a -m <nomailer> -M exec /my/script -M test
나는 위의 어떤 것도 테스트하지 않았습니다. -d
test 를 사용하여 특정 옵션을 포함해야 하는지 여부를 이미 결정했다고 가정합니다 smartctl
. (DEVICESCAN과 상호작용하는 방법을 모르겠습니다 -d
). 또한 기본 테스트가 -a
장치에 필요한 것과 일치한다고 가정합니다 . 예를 들어, 긴 매뉴얼 페이지에 언급된 한 가지는 불량 섹터를 재할당한 후 일부 드라이브가 잘못된 긍정을 표시한다는 것입니다.https://superuser.com/a/539040/110495
답변2
smartd
스크립트를 호출 하려면 옵션을 참조하세요 -w
.
-w 경로, --warnexec=경로
smartd가 경고 메시지를 보내야 하는 경우 기본 스크립트 대신 실행 가능한 경로를 실행하세요. PATH는 실행 가능한 바이너리 또는 스크립트를 가리켜야 합니다. 기본 스크립트는 입니다
/etc/smartd_warning.sh
.
이 스크립트는 일반적으로 이메일을 보내는 데 사용됩니다. 다음 환경 변수를 사용하여 호출됩니다.
SMARTD_MAILER
인수가 있는 경우 -M exec로 설정하고, 그렇지 않으면 "mail"로 설정합니다(예: /usr/local/bin/mail,mail).SMARTD_DEVICE
장치 경로(예: /dev/sda)로 설정합니다.SMARTD_DEVICETYPE
"-d" 지시어로 지정된 장치 유형으로 설정하거나, 없는 경우 "auto"로 설정합니다.SMARTD_DEVICESTRING
장치 설명으로 설정합니다. SMARTD_DEVICE로 시작하고 선택적인 컨트롤러 식별자가 뒤에 올 수 있습니다(예: /dev/sda [SAT]). 문자열에는 공백이 포함될 수 있으며 따옴표는 포함될 수 없습니다.SMARTD_DEVICEINFO
장치 식별 정보로 설정합니다. 여기에는 smartctl -i로 인쇄된 대부분의 정보가 포함되어 있지만 짧은 한 줄 형식입니다. 이 장치 정보는 smartd가 시작될 때도 기록됩니다. 문자열에 공백 문자가 포함되어 있으며 인용되지 않았습니다.SMARTD_FAILTYPE
경고나 메시지 이메일의 이유를 알려주세요. 가능한 값과 의미는 다음과 같습니다:
EmailTest: 이메일 테스트 메시지입니다.
상태: SMART 상태는 임박한 오류를 나타냅니다.
사용법: 사용법 속성이 실패했습니다.
자가 테스트: 자가 테스트 실패 횟수가 늘어납니다.
ErrorCount: ATA 오류 로그의 오류 수가 증가했습니다.
CurrentPendingSector: 여러 디스크 섹터 중 하나를 읽을 수 없어 재할당으로 표시되었습니다(예비 섹터로 대체).
OfflineUn CorrectableSector: 오프라인 테스트 또는 자체 테스트 중에 하나 이상의 디스크 섹터를 읽을 수 없습니다.
온도: 온도가 임계 한계에 도달했습니다(-W 지시문 참조).
FailedHealthCheck: SMART 상태 명령이 실패했습니다.
FailedReadSmartData: SMART 속성 데이터를 읽는 명령이 실패했습니다.
FailedReadSmartErrorLog: SMART 오류 로그를 읽는 명령이 실패했습니다.
FailedReadSmartSelfTestLog: SMART 자체 테스트 로그를 읽는 명령이 실패했습니다.
FailedOpenDevice: 장치의 open() 명령이 실패했습니다.SMARTD_주소
"-m" 명령의 주소 매개변수 ADD에 의해 결정됩니다. ADD가 있으면 SMARTD_ADDRESS가 설정되지 않습니다. 그렇지 않으면 ADD 매개변수에 의해 제공되고 쉼표는 공백으로 대체된 쉼표로 구분된 이메일 주소 목록으로 설정됩니다(예:[이메일 보호됨]뿌리). 여러 이메일 주소가 제공되면 문자열에 공백 문자가 포함되며 따옴표로 묶이지 않으므로 쉘 스크립트에서 사용하려면 큰따옴표로 묶어야 할 수도 있습니다.SMARTD_MESSAGE
smartd의 한 문장 요약 경고 이메일 메시지 문자열로 설정합니다. 메시지 문자열에는 공백 문자가 포함되어 있으며 인용되지 않습니다. 따라서 쉘 스크립트에서 $SMARTD_MESSAGE를 사용하려면 큰따옴표로 묶어야 합니다.SMARTD_FULLMESSAGE
smartd의 전체 이메일 경고 메시지 문자열 내용으로 설정합니다. 메시지 문자열에는 공백과 캐리지 리턴 문자가 포함되어 있으며 인용되지 않습니다. 따라서 쉘 스크립트에서 $SMARTD_FULLMESSAGE를 사용하려면 큰따옴표로 묶어야 합니다.SMARTD_TFIRST
이 유형의 첫 번째 문제가 보고된 시간과 날짜를 제공하는 텍스트 문자열입니다. 텍스트 문자열에는 공백 문자가 포함되어 있고 줄 바꿈이 없으며 따옴표가 없습니다. 예: 2003년 2월 9일 일요일 14:58:19 CSTSMARTD_TFIRSTEPOCH
SMARTD_TFIRST의 unix epoch(1970년 1월 1일 이후의 초 수)인 정수입니다.SMARTD_PREVCNT
이전에 보낸 메시지 수를 지정하는 정수입니다. 첫 번째 메시지의 경우 "0"으로 설정됩니다.SMARTD_NEXTDAYS
다음 메시지가 전송되기 전까지의 일 수를 지정하는 정수입니다. "-M Once"에서는 비어 있고 "-M daily"에서는 "1"로 설정되어 있습니다.
자세한 내용은 man smartd
및 을 참조하십시오 man smartd.conf
.