
コンテキストとして、私は Raspberry Pi モデル 3B+ を使用しています。現在、Pi の起動時に Python スクリプトを実行しようとしています。しかし、プログラムを適切に起動するのに苦労しています。次のサービス ファイルを使用すると、プログラムは起動しますが、10 秒ごとに再起動するため、プログラムが無限に起動されます。プログラムを 1 回だけ起動したいのです。
[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
何かのために本当に必要な場合にのみ定義する必要があります (プログラムを起動するためだけではありません)。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