매일 밤 정확히 오전 3시에 Raspberry가 재부팅되지만 제가 하거나 실행 중인 어떤 것도 이 문제를 유발하지 않습니다. "문제가 있는" 프로세스를 식별하고 다시 시작을 비활성화하고 싶습니다.
현재 버전은 다음과 같습니다.
pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
확인해보니 crontab -e
아무 것도 발생하지 않습니다. 예약된 재시작을 트리거할 수 있는 요인을 결정하는 방법에 대한 다른 제안 사항이 있습니까?
감사해요.
고쳐 쓰다
명령 출력 last
:
pi@raspberrypi:~/splitflap $ last
pi pts/2 192.168.0.8 Wed May 6 17:42 still logged in
pi pts/2 192.168.0.8 Wed May 6 09:34 - 17:34 (08:00)
pi pts/1 192.168.0.8 Wed May 6 09:34 still logged in
pi pts/0 192.168.0.8 Wed May 6 09:34 still logged in
reboot system boot 4.19.97-v7+ Wed Dec 31 16:00 still running
고쳐 쓰다
systemctl list-timers --all
명령 출력
pi@raspberrypi:~/splitflap/pickle $ systemctl list-timers --all
NEXT LEFT LAST PASSED UNIT ACTIVATES
Thu 2020-05-07 08:39:00 PDT 5min left Thu 2020-05-07 08:09:10 PDT 24min ago phpsessionclean.timer phpsessionclean.service
Thu 2020-05-07 08:46:11 PDT 12min left Thu 2020-05-07 08:31:11 PDT 2min 21s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service
Thu 2020-05-07 08:46:11 PDT 12min left Thu 2020-05-07 08:31:11 PDT 2min 21s ago prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service
Thu 2020-05-07 13:51:22 PDT 5h 17min left Wed 2020-05-06 19:22:06 PDT 13h ago apt-daily.timer apt-daily.service
Fri 2020-05-08 00:00:00 PDT 15h left Thu 2020-05-07 00:00:12 PDT 8h ago logrotate.timer logrotate.service
Fri 2020-05-08 00:00:00 PDT 15h left Thu 2020-05-07 00:00:12 PDT 8h ago man-db.timer man-db.service
Fri 2020-05-08 03:15:12 PDT 18h left Thu 2020-05-07 03:15:12 PDT 5h 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Fri 2020-05-08 06:24:39 PDT 21h left Thu 2020-05-07 06:04:53 PDT 2h 28min ago apt-daily-upgrade.timer apt-daily-upgrade.service
n/a n/a n/a n/a prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service
n/a n/a n/a n/a prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service
오전 3시 이전에는 아무것도 보지 못했습니다. systemd-tmpfiles-clean.service
오전 3시 15분에 프로그램이 실행 중이었지만 정확히 오전 3시에 시스템이 재부팅되었습니다.
하지만 저는 systemd를 처음 사용하기 때문에 아직 공개되지 않은 다른 타이머가 있을까요? 시도해 보았 sudo systemctl list-timers --all
으나 동일한 목록이 나왔습니다.
또한 cron.daily에서 다음을 발견했습니다. 각 스크립트를 확인한 후에 아무것도 다시 시작되지 않습니다(비록 /etc/crontab을 올바르게 해석하면 일일 스크립트가 실행되는 대신 어쨌든 6분에 실행됩니다(그러나 시간은 확실하지 않음). 정시에.
pi@raspberrypi:~ $ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
pi@raspberrypi:~ $ ls /etc/cron.daily/
apt-compat bsdmainutils dpkg exim4-base lighttpd logrotate man-db ntp passwd
로거를 사용하여 업데이트
좋은 소식은 명령을 수정하면 요청이 기록된다는 것입니다. 마지막 두 줄을 참조하세요.
pi@raspberrypi:~/splitflap $ cat /var/log/user.log
<4 other lines removed>
May 8 03:00:01 raspberrypi reboot: Reboot requested but ignored: reboot
May 8 03:00:01 raspberrypi reboot: Parent: root 15328 15318 0 03:00 ? 00:00:00 /bin/sh -c /sbin/reboot
Def가 더 가깝다고 느껴지지만 실행할 때 문제가 되는 프로그램이나 서비스를 추가로 식별하는 방법에 대한 지식이 부족하다는 것을 인정합니다 ps -ef
.
답변1
알림 및 로깅 스크립트로 교체하면 /sbin/reboot
재시작 원인을 파악하는 데 도움이 될 수 있습니다. 다음은 이러한 스크립트를 설정하는 예입니다.
mv /sbin/reboot /sbin/reboot.REAL
cat >>/sbin/reboot <'x'
#!/bin/bash
#
logger -t reboot "Reboot requested but ignored: reboot $*"
# Identify the calling process
ps=$(ps -ef | awk -v ppid=$PPID '$2 == ppid')
logger -t reboot "Parent: $ps"
# Abort
exit 1
x
chmod a+x /sbin/reboot
이 Forge를 호출하면 reboot
호출당 두 개의 항목을 받게 됩니다. /var/log/user.log
예를 들어,
May 7 16:06:20 pi reboot: Reboot requested but ignored
May 7 16:06:20 pi reboot: Parent: roaima 20862 20857 0 16:01 pts/0 00:00:00 -bash
Intercept에 비슷한 스타일을 적용해야 할 수도 있습니다 systemctl ... reboot
. 다른 기능을 중단하지 않는 것이 중요하기 때문에 이는 다소 어렵습니다. 이와 같이 시작하는 스크립트는 다음과 같이 설치하는 데 적합할 수 있습니다 /bin/systemctl
.
#!/bin/bash
#
if [[ "$*" != *reboot* ]]
then
logger -t reboot "Not a reboot: systemctl $*"
exec /bin/systemctl.REAL "$@"
fi
logger -t reboot "Reboot requested but ignored: systemctl $*"
...
답변2
재부팅이 없는지 확인했지만 문제 의 원인 reboot
은 루트 였습니다 .crontab
crontab -e
sudo crontab -e
reboot
저에게 올바른 방향을 알려준 모든 도움과 의견에 감사드립니다!