1

如何让我的 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,我的程序就必须运行。提前非常感谢!

4

3 回答 3

3

您必须在正确的/etc/rcX.d文件夹中创建指向该初始化脚本的链接。在 raspbian 上,这是通过以下方式完成的:

sudo update-rc.d YOUR_INIT_SCRIPT_NAME defaults

您可以阅读此debian 操作指南以获取更多信息。您还应该阅读更多关于Debian 中的运行级别的信息。

于 2013-08-12T21:54:03.600 回答
1

脚本/服务在启动时如何运行,通常取决于使用的 init 系统的类型。在我的脑海中,我会区分以下 4 种类型:

  • 嵌入式样式:单个 shell 脚本具有启动系统的所有命令。通常,该脚本位于内核尝试作为 init 进程启动的路径之一。
  • BSD风格
  • System V 风格:这个使用 /etc/inittab 和 /etc/rc*.d/ 中的 latr 脚本来一一启动服务
  • 系统

来自 Debian 的 Raspbian 设备,所以我认为是 System 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)。

于 2013-08-12T22:03:16.113 回答
0

http://www.akeric.com/blog/?p=1976

这是有关如何在启动时自动登录和启动脚本的教程。

如果它仍然不起作用,则说明您的脚本或 C 程序有问题。

于 2013-09-03T10:33:51.910 回答