每次我想运行该系统时,登录每个传感器单元并运行两个循环的Python程序,一个用于收集传感器数据,另一个用于传输到基站。
这些单元正进入无法访问Internet的尴尬位置,因此需要一个监视器,用键盘和鼠标让它们运行起来并不容易。
有什么方法可以设置它们以自动登录,运行程序1,然后在启动时自动运行程序2?
#1 楼
您可以将这两个程序添加到rc.local文件中。这将在启动时运行它们。可以在http://www.raspberrypi.org/documentation/linux/usage/rc-local.md中找到更多信息。#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
,它可以工作!
/>
评论
该文档中似乎没有使人感到不适的一点:请勿在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