私は現在、ビーグルボーングリーンを起動してpythonスクリプトを開始するのにかかる時間を短縮しようとしています。私の単純なpythonスクリプトはリレーをオンにするだけです岬。
リレーが回転するのにかかる時間を、起動して何か便利なことをするのにかかる時間として使用しています。
以前は、リレーには18秒かかりましたが、systemdをいじって14秒に短縮しました。
pythonプログラムを開始する簡単なユニットファイルを作成しました
[Unit]
Description=Relaycheck run on startup
DefaultDependencies=no
After=systemd-system.slice
[Service]
WorkingDirectory=/home/
ExecStart=/home/relaycheck2.py
StandardOutput=null
[Install]
Alias=relaycheck2.service
そして、これが現在のブートチャートのトリミングされた画像です: ブートチャート
私の理解では、私のサービスはかなり早い段階で実行されており、ネットワークなどの時間のかかるサービスは私のリレーサービスに影響を与えません。これは正しいです?
Systemdを使用して起動する時間を短縮するために他にできることはありますか?
プログラムは状態を維持する必要がありますか(書き込み可能なディスクが必要ですか?)おそらく実行できる断食は、initシステムをまったく使用しないことです。代わりに、これをカーネル引数に追加することを検討してください(おそらくuBoot環境/構成で):
init=/path/to/your/program
したがって、systemd
(プロセスマネージャー)を実行する代わりに、Linuxカーネルは最初のプロセスとしてプログラムを実行します。これはPythonスクリプトです。スクリプトをinitとして実行できるとは考えていません)とおっしゃいました。 pythonアプリケーションを生成するコンパイル言語で小さなラッパープログラムを作成する必要があるかもしれません。
シェル/ラッパープログラムもシグナルを処理する必要があることに注意してください(デフォルトのシグナルハンドラーを持たないプログラムのinit/systemdはシグナルを処理します)。 dumb-init のようなものを使用することで逃げることができるかもしれません。これは通常Dockerコンテナに使用されます。
書き込み可能なボリュームが必要な場合は、ラッパープログラムにパーティションをマウントさせることもできます(ルートパーティションである必要はありません。ストレージ用にUSBスティックをマウントすることをお勧めします)。
組み込みシステム/ uBootではカーネルパラメータが少しトリッキーになる可能性があるため、最初にデスクトップでこれを試してみますVM。