yocto ディストリビューションの起動時に実行したい C++ プログラムがあります。
/etc/init.d/ に test.sh という簡単なスクリプトを追加してみました。そこには次のような内容が書かれています。
echo "start my program"
ProgramName
「ProgramName」を使用すると、シェルで実行したときにプログラムが実行されます。この新しいスクリプトを実行すると、プログラムが実行されます。
rc5 フォルダーへのシンボリック リンクとして追加しました。再起動を試みましたが、何も起こりません。他に何かする必要がありますか?
これをレシピで動作させるにはどうしたらよいでしょうか。最終的には、これを自動化したいと考えています。
答え1
起動時にプログラムを実行するための簡単な解決策は、次のように crontab エントリを作成することです。
@reboot /path/to/program
これは通常、システムデーモンではないプログラムには適しています。
タグ@reboot
は、システムが起動したときにプログラムが起動することを保証します。ほとんどcron 実装:
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
詳細については、man 5 crontab
システムのを参照してください。
答え2
チェックしてくださいこのQ/A同様の議論のために、スクリプトにヘッダーを追加します。
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Sample_GT02 daemon startup script
# Description: Sample Server for GT02 class
### END INIT INFO
答え3
レシピに以下を追加します:
- INITSCRIPT_NAME に、etc/init.d にインストールする必要がある初期化スクリプトのファイル名を追加します。
- INITSCRIPT_PARAMS で、スクリプトの実行レベルと、スクリプトを実行する initlevels を指定します。
たとえば、「poky/meta/recipes-connectivity/connman/connman.inc」のファイルを参照できます。次の使用例を参照してください。
INITSCRIPT_NAME = "connman"
INITSCRIPT_PARAMS = "start 05 5 2 3 . stop 22 0 1 6 ."
上記のスニペットでは、connman スクリプトが ect/init.d にインストールされ、スクリプトの実行レベルが 05 であるため、スクリプトは initlevels 2、3、5 で開始され、レベル 0、1、6 で停止します。