私は現在、beaglebone greenを起動し、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でブート時間を短縮するために他の方法がありますか?
答え1
プログラムが状態を維持する必要があるかどうか(書き込み可能なディスクが必要ですか?)できる最も簡単なことは、initシステムをまったく使用しないことです。代わりに、これをカーネルパラメータに追加することを検討してください(ほとんどのuBoot環境/設定で)。
init=/path/to/your/program
systemd
したがって、Linuxカーネルは実行されず(プロセスマネージャ)、代わりにプログラムが最初のプロセスとして実行されます。今これはPythonスクリプトだと言います。私はいません。考えるスクリプトをinitとして実行できます。 Pythonアプリケーションを作成するには、コンパイルされた言語で小さなラッパープログラムを作成する必要があります。
シェル/ラッパーも信号を処理する必要があることを覚えておいてください(デフォルトのシグナルハンドラを持たないプログラムの場合は、init / systemdがシグナルを処理します)。次のようなものを使って逃げることもできます。愚かな初期化通常、Dockerコンテナで使用されます。
書き込み可能なボリュームが必要な場合は、ラッパーにパーティションをマウントするように要求することもできます(ルートパーティションである必要はありません。保存するためにUSBスティックをマウントする必要があるかもしれません)。
組み込みシステム/uBootではカーネルパラメータが少し難しいかもしれませんので、まずデスクトップ仮想マシンでこれを試してみましょう。