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=継続して実行されます。

これを解決するためのアイデアは次のとおりです。

サービスをユーザーバスに移動します。これはまた暗黙的であるためDISPLAYXAUTHORITYまたはを定義する必要がないことを意味します。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

関連情報