如何让我的C代码在我的Raspberry PI上自动运行?我已经看过一个教程,以实现这一目标,但我真的不知道我还缺少什么。我的初始化脚本如下所示:
#! /bin/sh
# /etc/init.d/my_settings
#
# Something that could run always can be written here
### BEGIN INIT INFO
# Provides: my_settings
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Script to start C program at boot time
# Description: Enable service provided by my_settings
### END INIT INFO
# Carry out different functions when asked to by the system
case "$1" in
start)
echo "Starting RPi Data Collector Program"
# run application you want to start
sudo /home/pi/Documents/C_Projects/cfor_RPi/charlie &
;;
stop)
echo "Killing RPi Data Collector Program"
# kills the application you want to stop
sudo killall charlie
;;
*)
echo "Usage: /etc/init.d/my_settings {start | stop}"
exit 1
;;
esac
exit 0
问题是我的程序在启动时没有运行,我真的不知道为什么。我会失踪什么?这个“killall”声明是否在执行期间“杀死”了一些有用的过程?我正在使这个代码作为后台应用程序运行,但我知道几秒钟后,当RPi初始化时,它会要求输入用户名和密码以初始化会话。我的RPi可能没有执行此代码,因为我没有提供日志记录信息吗?我没有显示器,所以我的程序必须在我插入Rpi后运行。非常感谢提前!
答案 0 :(得分:3)
您必须在正确的/etc/rcX.d
文件夹中创建指向该init脚本的链接。在raspbian上,这是通过:
sudo update-rc.d YOUR_INIT_SCRIPT_NAME defaults
您可以阅读此debian how-to以获取更多信息。您还应该阅读有关run levels in Debian的更多信息。
答案 1 :(得分:1)
脚本/服务如何在启动时运行,通常取决于所使用的init系统的类型。在我的头顶,我会分散以下4种类型:
ln -s /etc/init.d/your-script /etc/rc2.d/S08my-script
不是链接名称的结构:它说,它应该在输入运行级别时启动,并且'08'确定位置(执行ls /etc/rc2.d/以查看其他链接)
更多细节:init(8)。
update-rc.d(8)是在debian上创建符号链接的正确方法。请参见联机帮助页:
update-rc.d - install and remove System-V style init script links
我建议至少阅读手册页update-rc.d(8)和init(8)。
答案 2 :(得分:0)