我有一个 C++ 程序,我希望它在 yocto 发行版上启动时运行。
我尝试在 /etc/init.d/ 上添加一个名为 test.sh 的简单脚本,其中我只有:
echo "start my program"
ProgramName
使用“ProgramName”,当我在 shell 上执行时,我的程序就会运行。如果我执行这个新脚本,它会让我的程序运行。
我将其添加为 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
请检查这个问答进行类似的讨论。并在脚本中添加标头:
#!/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 级中停止。