I2C 16x2ディスプレイを備えたRaspberry Piがあります。画面には「ようこそ」とのみ表示されます。
Q:Raspberry Piの電源を入れた直後にこのスクリプトを実行したいと思います。
rc.local ファイル sudo python /path/to/file に次のコマンドを追加すると自動的に起動しますが、スクリプトが実行されるまで 45 秒以上かかります。
Raspberry Piの電源を入れた後、または起動してから10秒以内にPythonスクリプトを起動したり、画面に表示したりする方法はありますか?
答え1
Systemd は、サービスの単位ファイルに指定した依存関係を適用して、他のサービスに基づいて条件付きでサービスを開始できます。私も同様の問題があり、特定の順序でスクリプトを実行する必要があったため、これに対してシステムサービスを作成してカスタムサービスを開始しました。後ろに別のサービス。
完了したよりも難しいようです。それほど複雑ではなく、後で参照できるように知っておく価値があります。
これは(2)段階のプロセスです。
ステップ1:注文サービスの成長分析
スクリプトを開始するために条件付き関係を指定する前に(サービスとして)誰でも今後または後ろにサービスのユニットファイルでは、サービスが開始されるタイミングと方法を知る必要があります。
次のコマンドは、サービスの開始と対応する電源投入時のグラフを表示します。
sudo systemd-analyze plot > /home/pi/services-startup.svg
以下を使用してファイルを開きます。フォトブラウザシステムの起動時にサービスが開始されるタイミングを確認できます。
サービス間の依存関係を理解するための追加ツール:
sudo systemd-analyze critical-chain
sudo systemd-analyze critical-chain someServiceName.service
tree /etc/systemd/system
ステップ2:注文の依存関係を適用するためのスクリプト用のカスタムサービスの作成
サービス間の依存関係を生成するために使用できるいくつかのディレクティブがあり、Before
その中でAfter
最も明白なものは次のとおりです。
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=
ユニットファイルの例:
ヘッドレスPiのIPアドレスを電子メールで送信するスクリプトがありますが、スクリプトの実行順序(サービスとして実行)のため失敗します。上記の分析を完了し、スクリプトを実行するために、以下の単位ファイル構成を作成しました。使い捨て提供する。これは、次のようになるまでカスタムサービスが開始されるのを待ちます。後ろにサービスmotion
完了:
cat <<EOF> /etc/systemd/system/email-camera-address.service
[Unit]
Description=Email IP Address of Camera on Boot
Requires=network-online.target
After=motion.service
[Service]
User=pi
Group=pi
Type=oneshot
ExecStart=$PATHSCRIPTS/email-camera-address.sh
[Install]
WantedBy=multi-user.target
EOF
chmod 644 /etc/systemd/system/email-camera-address.service
systemctl enable email-camera-address.service
上記の完全なスクリプトを見つけることができますここ: