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

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

这些单元正进入无法访问Internet的尴尬位置,因此需要一个监视器,用键盘和鼠标让它们运行起来并不容易。
有什么方法可以设置它们以自动登录,运行程序1,然后在启动时自动运行程序2?

#1 楼

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

评论


该文档中似乎没有使人感到不适的一点:请勿在rc.local本身中使用sudo。它在引导时以root特权运行。除非您的程序快速执行某些操作然后退出,否则请务必注意有关&的部分。

–金锁♦
2015年3月1日12:47

如果您希望程序在网络启动后运行,并且/path/to/somescript.sh&到rc.local,并在脚本中添加while! ping -c 1 -W 1 8.8.8.8;睡一觉完成在启动程序之前。

– Tor Klingberg
17年4月13日在10:34

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

–风之风
18-2-14在11:28



#2 楼

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/service,以便daemontools自动(重新)启动它:

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

#3 楼


在Raspian中单击菜单,首选项,主菜单编辑器
单击首选项并检查LXSession的默认应用程序
单击确定并关闭主菜单编辑器
现在单击菜单,然后在首选项下单击默认用于LXSession的应用程序
LXSession配置打开
,单击“自动启动”
在“手动”下,将自动启动的应用程序粘贴到Java命令行中
单击添加

,关闭LXSession配置应用程序并重新启动pi

重新启动后,您的Java应用应运行



评论


我认为这里只需要更多细节

–达斯·维达♦
16年4月10日在9:00

对我来说很好!

– jbyrnes
17年8月6日在14:08

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

–Pascal Lamers
19年2月22日在15:59

#4 楼

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

man 5 crontab中搜索@reboot

#5 楼

这个问题是在近6年前提出的,至今仍然是一个相关的问题。但是-已接受的答案不再相关,因为rc.local已被弃用。
rc.local至少有两个替代方法-到目前为止,它们是有效且受支持的:


systemd


cron


相比之下,cron更简单,systemd更精确。通常,任何一种都可以满足大多数要求。

#6 楼

您可能需要研究service。您可以创建作为系统初始化一部分的初始化脚本,并将其放在适当的运行级别。

运行man service

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

评论


遗憾的是,随着大多数Linux发行版(包括Raspbian)向systemd进退两难的趋势,如果OP更新了他们的系统,则该答案将需要更新,以便从sysV init接手... 8-

– SlySven
17年12月19日在2:43

#7 楼

只需单击此链接即可。

假设您在台式机上有test.txt,则示例可能是:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@leafpad /home/pi/Desktop/test.txt


,它可以工作!
/>