Raspberry Pi를 다시 시작/시작할 때 Python 스크립트가 올바르게 시작되지 않습니다.

Raspberry Pi를 다시 시작/시작할 때 Python 스크립트가 올바르게 시작되지 않습니다.

맥락상 저는 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.Add 로 변경하여 PartOf=graphical-session.target사용자가 세션에서 로그아웃할 때 서비스를 중지합니다. graphical-session.target사용자 버스에서만 사용할 수 있는 대상이며 사용자가 그래픽 세션에 로그인한 경우에만 발생합니다. Restart// RestartSec무언가를 하기 위해 정말로 필요한 KillMode경우 에만 정의하면 됩니다 TimeoutSec(단순히 프로그램을 시작하기 위해서가 아니라).

이렇게 하면 사용자가 그래픽 세션에 로그인할 때까지 서비스가 시작되지 않습니다(이것이 이전에는 서비스가 작동하지 못하게 했던 것 같습니다).

이렇게 하려면 서비스 파일을 에서 /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

관련 정보