Raspberry Pi在启动时自动启动程序


22

我建立了一个无线传感器网络,该网络由两个装有传感器的Raspberry Pi(runnnig Raspbian)和一个收集数据的基站Raspberry Pi组成。

每次我要运行该系统时,我都必须登录到每个传感器单元并运行两个循环的Python程序,一个用于收集传感器数据,另一个用于传输到基站。

这些设备将进入无法访问互联网的尴尬位置,因此随身携带显示器,键盘和鼠标让它们运行起来并不容易。有什么方法可以设置它们以自动登录,运行程序1,然后在启动时自动运行程序2?

Answers:


15

您可以将这两个程序添加到rc.local文件中。这将在启动时运行它们。可以在http://www.raspberrypi.org/documentation/linux/usage/rc-local.md中找到更多信息。


3
不在该文档似乎绊倒人组成一个观点:不要用sudorc.local本身。它在引导时以root特权运行。&除非您的程序快速执行某些操作然后退出,否则请务必注意有关使用的部分。
goldilocks

如果要在网络启动后运行程序,请运行/path/to/somescript.sh &rc.local,然后在脚本中添加,while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;然后再启动程序。
Tor Klingberg

+ goldilocks问题在于,如果不rc.local事先运行sudo ,就无法实现对文件的写访问。你有什么建议?
Rincewind

15

Xer0FyT的答案可能是在PI上自动启动程序的最简单方法。但是,一旦启动的程序由于某种原因而崩溃,因为没有进程监视,它将无法重新启动,就会出现问题。我个人建议使用daemontools代替。设置非常简单(并包含在Raspbian中)。基本上,您将创建一个服务目录,其中包含run启动程序的Shell脚本。然后,daemontools将确保您的程序由于任何原因崩溃时已启动和重新启动。

设置daemontools非常简单。只是

apt-get install daemontools daemontools-run

然后创建包含可执行运行脚本的服务目录:

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

查看/service/my-service/run并编辑它,以便它启动您自己的程序,而不是运行echo。完成后,将该目录符号链接到/etc/servicedaemontools中,以便自动(重新)启动该目录:

cd /etc/service
ln -s /service/my-service .

大约5秒钟后,您的程序应运行。您可以使用以下方式启动/停止它

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

也可以登录到(例如)syslog。因此,程序的输出不会丢失。我在这里写了一篇更完整的博客文章:https : //info-beamer.com/blog/running-info-beamer-in-production


9
  1. 在Raspian中,单击菜单,首选项,主菜单编辑器
  2. 单击首选项,然后检查LXSession的默认应用程序
  3. 单击确定,然后关闭主菜单编辑器
  4. 现在单击“菜单”,然后在“首选项”下单击“ LXSession的默认应用程序”
  5. LXSession配置打开
  6. 点击自动启动
  7. 在“手动自动启动的应用程序”下,粘贴到您的Java命令行中
  8. 点击添加
  9. 关闭LXSession配置应用程序并重新启动pi

    您的Java应用程序应在重新启动后运行


我认为这里只需要更多细节
达斯·维达

对我来说很好!
jbyrnes

谢谢@Palmeta!我在自动启动中有一个程序,但实际上忘记了在哪里设置它。我到处看。使用您描述的配置工具,我终于可以再次找到它并停用它:D!100分
Pascal Lamers

2

您可能已经cron安装了PI的一些内部管理任务。

搜索man 5 crontab@reboot


0

您可能需要研究service。您可以创建一个初始化脚本,该脚本是系统初始化的一部分,并将其置于适当的运行级别。

运行man service

这是创建初始化脚本的指南:http : //www.novell.com/coolsolutions/feature/15380.html


2
令人遗憾的是,随着systemd大多数Linux发行版(包括Raspbian)的发展步履蹒跚,如果OP更新其系统,以便从sysV接手,则此答案将需要更新init... 8
SlySven

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.