yoctoディストリビューションで起動時に実行したいC ++プログラムがあります。
/etc/init.d/にtest.shという単純なスクリプトを追加してみました。
echo "start my program"
ProgramName
"ProgramName"を使用すると、私のプログラムがシェルで実行されたときに実行されます。この新しいスクリプトを実行すると、プログラムが実行されます。
rc5フォルダにシンボリックリンクとして追加しました。やり直してみましたが、何も起こりませんでした。もっとやるべきことはありますか?
レシピにどのように適用できますか?結局私はこれを自動化したいと思います。
答え1
起動時にプログラムを実行する簡単な解決策は、次のようにcrontabエントリを作成することです。
@reboot /path/to/program
これは通常、システムデーモンではなくプログラムには十分です。
この@reboot
タグは、システム起動時にプログラムが起動してサポートされていることを確認します。最大クローンの実装:
@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を設定し、スクリプトの実行レベルとスクリプトを実行する必要がある初期化レベルを指定します。
たとえば、「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 で停止します。