다시 시작을 유발한 프로그램 또는 프로세스 찾기

다시 시작을 유발한 프로그램 또는 프로세스 찾기

매일 밤 정확히 오전 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은 루트 였습니다 .crontabcrontab -esudo crontab -ereboot

저에게 올바른 방향을 알려준 모든 도움과 의견에 감사드립니다!

관련 정보