我如何让我的C代码在我的Raspberry PI上自动运行? 我已经看到一个教程,以实现这一目标,但我真的不知道我还缺less什么。 我的初始化脚本如下所示:
#! /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。非常感谢提前!
在启动时如何运行脚本/服务通常取决于所使用的init系统的类型。 关于我的头顶,我会分散以下四种类型:
来自Debian的Raspbian服务,所以我想系统V的风格。 你必须将脚本符号链接到/etc/rc2.d
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)。
您必须在正确的/etc/rcX.d
文件夹中创建指向该init脚本的链接。 在拉斯维加斯,这是通过:
sudo update-rc.d YOUR_INIT_SCRIPT_NAME defaults
你可以阅读这个debian how-to以获得更多信息。 你也应该阅读更多关于Debian的运行级别 。