로거에서 무작위 정전을 기록할 수 있는지 궁금합니다. 당연히 전원이 꺼졌을 때의 시간 기록은 없지만, 정전 후 재가동 시 정전이 발생한 시점을 알 수 있는 방법이 있을까요? 나는 Red Hat(및 일반적으로 Linux)이 꽤 좋은 로깅( /var/log
)을 가지고 있다는 것을 알고 있지만 정전을 처리할 수 있는 기본 로깅 절차가 없다고 생각합니다.
로깅 프로그램이 없을 경우 시작 스크립트를 변경하는 방법도 논의 중입니다. BIOS는 항상 전원이 켜지도록 설정되어 있으므로 정전이 발생하면 자동으로 재부팅됩니다.
시스템은 정전이 발생한 경우에만 종료되며 수동으로 종료되지는 않습니다.
mail
그래서 처음 부팅한 후 부팅할 때마다 정전이 표시되므로 시작 스크립트에 무언가(간단한 명령)를 추가할 생각입니다 . 불행하게도 나는 그러한 명령의 파일이나 위치, 실제 구문이 무엇인지 모릅니다.
답변1
정전 후 재기동 시 정전이 발생했는지 확인할 수 있는 방법이 있나요?
SMBIOS에 대한 DMI "웨이크업 유형"을 참조하십시오.
$ sudo dmidecode | fgrep 'Wake-up Type'
Wake-up Type: AC Power Restored
/sys/fireware/dmi/entries/1-0/...을 통해 프로그래밍 방식으로 이 정보를 검색할 수 있습니다.
답변2
다시 시작은 다음을 사용하여 시스템의 syslog에 기록됩니다.체계(예: RHEL 7, Fedora). 다음을 통해 찾을 수 있습니다.
# journalctl --list-boots
[..]
0 51545e9739db4eb1ab602dd338a937b1 Wed 2014-08-06 10:58:04 CEST—Mon 2014-08-18 22:31:43 CEST
일반적으로 재부팅은 wtmp를 통해서도 기록됩니다. 즉, last
다음을 사용하여 표시할 수 있습니다.
# last
[..]
reboot system boot 3.11.10-301.fc20 Wed Jun 4 08:15 - 18:43 (10:27)
(Fedora 20 시스템의 출력)
Ubuntu 매뉴얼 페이지에서는 last
이 메커니즘을 설명합니다.
The pseudo user reboot logs in each time the system is rebooted. Thus last reboot will show a log of all reboots since the log file was cre‐ ated.
(배포판에 따라 장기간 가동 시간 동안 wtmp 파일이 회전되어 마지막 재부팅 정보가 표시되지 않을 수 있습니다.)
다시 시작 알림을 받으려면 cron 작업을 통해 간접적으로 설정할 수 있습니다. 예를 들면 다음과 같습니다.
#!/bin/bash
set -e
set -u
uptime=$(awk '{print $1}' /proc/uptime)
if [ -f /var/tmp/last_uptime ]; then
last_uptime=$(cat /var/tmp/last_uptime)
if [ $uptime -lt $last_uptime ]; then
echo System was rebooted
exit 1
fi
fi
echo $uptime > /var/tmp/last_uptime
또는 부팅 프로세스 중에 mail 명령을 실행할 수 있습니다. 그것 으로 systemd
당신은 할 수 있습니다:
# echo 'echo Just rebooted at $(date) | mail juser@example' >> /etc/rc.d/rc.local
# chmod 755 /etc/rc.d/rc.local
systemd가 아닌 다른 배포판을 사용하면 /etc/rc.local
부팅 시퀀스가 끝날 때 실행될 수 있습니다.