재부팅/시작할 때 Python 스크립트가 제대로 시작되지 않음 Raspberry Pi

재부팅/시작할 때 Python 스크립트가 제대로 시작되지 않음 Raspberry Pi

상황에 따라 Raspberry Pi 모델 3B+를 사용하고 있습니다. 현재 Pi 부팅 시 Python 스크립트를 실행하려고 합니다. 하지만 프로그램을 제대로 시작하는 데 어려움을 겪고 있습니다. 다음 서비스 파일을 사용하면 실행되지만 10초마다 다시 실행되어 프로그램이 무한히 여러 번 실행됩니다. 프로그램이 한 번만 실행되기를 바랍니다.

[Unit]
Description=Start Bling

[Service]
User=pi
Environment=DISPLAY=:0
WorkingDirectory=/home/pi/facial_recognition
Environment=XAUTHORITY=/home/pi/.Xauthority
Environment="prog_path"=/home/pi/facial_recognition
ExecStart=/usr/bin/python /home/pi/facial_recognition/run_on_start.py

Restart=always
RestartSec=10s
KillMode=process
TimeoutSec=infinity

[Install]
WantedBy=graphical.target

하지만 이 부분을 제거하면:

Restart=always
RestartSec=10s
KillMode=process
TimeoutSec=infinity

또는 Restart=on-failure로 변경하면 Raspberry Pi가 부팅될 때 아무 일도 일어나지 않습니다.

프로그램이 반드시 데스크탑 자동 로그인에서 실행될 필요는 없으므로 콘솔 버전에서 수정 가능한 부분이 있다면 괜찮습니다. 현재는 이렇게 하고 있기 때문에 프로그램이 의도한 대로 작동하는지 확인하기가 더 쉽습니다.

crontab도 사용해 보았지만 재부팅해도 아무 일도 일어나지 않았습니다. 끝에 '&'가 있든 없든 상관없습니다.

답변1

제가 생각하는 상황은 다음과 같습니다.

컴퓨터가 부팅되고 디스플레이 서버가 시작되며 서비스가 활성화됩니다. 그러나 pi아직 로그인하지 않았으므로 처음 시작하는 데 실패합니다. 10초마다 실행을 시도하는지 확인 Restart=always하세요 . Restart=10s그러나 어떻게든 기본 프로세스가 종료되고 Restart=계속해서 트리거됩니다.

이를 해결하기 위한 아이디어는 다음과 같습니다.

서비스를 사용자 버스로 이동합니다. 이는 또한 암시적으로 , 또는 를 DISPLAY정의 XAUTHORITY할 필요가 없음을 의미합니다 . User=그런 다음 [Install]섹션을 로 변경합니다 WantedBy=graphical-session.target. PartOf=graphical-session.target사용자가 세션에서 로그아웃할 때 서비스를 중지하려면 추가하세요 . graphical-session.target사용자 버스에서만 사용할 수 있고 사용자가 그래픽 세션에 로그인한 경우에만 발생하는 대상입니다. / / /는 Restart무언가 에 정말로 필요한 경우에만 정의하면 됩니다(단순히 프로그램을 시작하기 위해서가 아니라).RestartSecKillModeTimeoutSec

이렇게 하면 사용자가 그래픽 세션에 로그인하기 전에 서비스가 시작되지 않습니다(이것이 이전에는 서비스가 작동하지 못하게 했던 원인이라고 생각합니다).

그렇게 하려면 서비스 파일을 에서 으로 이동하여 /etc/systemd/system/다음 /home/pi/.config/systemd/user/bling.service과 같이 만드세요.

[Unit]
Description=Bling
PartOf=graphical-session.target

[Service]
WorkingDirectory=/home/pi/facial_recognition
Environment="prog_path"=/home/pi/facial_recognition
ExecStart=/usr/bin/python /home/pi/facial_recognition/run_on_start.py

[Install]
WantedBy=graphical-session.target

그런 다음 활성화하십시오.systemctl --user enable bling.service

관련 정보