在启动时在Raspberry Pi上运行程序的五种方法

在本教程中,我们将向您展示在启动时在Raspberry Pi上运行程序的五种方法。  可用于在引导时运行程序的五种方法是:

示例程序

 

 

您可以使用任何要在启动时运行的程序; 在本教程中,我们使用的是一个示例python程序,它将在Raspberry Pi的启动时发言。这个示例程序将使用Espeak 包使Raspberry pi“欢迎来到机器人世界”。

如果您没有安装Espeak 软件包,请在终端中运行以下命令进行安装:

sudo apt-get install espeak

要了解有关如何获取Raspberry Pi发言的更多信息,我们在此提供了一个教程

在/ home / pi目录中,打开一个文件进行编辑:

sudo nano sample.py

并输入以下代码并保存(按CTRL + X并输入Y)。

#!/ usr / bin / env python
来自子进程导入调用
call(['espeak“欢迎来到机器人世界”2> / dev / null'],shell = True)

示例程序在启动时在Raspberry Pi上运行程序

方法1:rc.local

 

在启动时在Raspberry Pi上运行程序的第一种方法是使用文件rc.local。为了在Pi启动时运行命令或程序,可以向rc.local 文件添加命令。如果您想在无头模式下启动Pi(即没有连接的显示器),并且在没有配置或手动启动的情况下运行程序,这将特别有用。

编辑rc.local

在你的Pi上, 使用你选择的编辑器编辑文件/etc/rc.local 。您必须使用root权限对其进行编辑:

sudo nano /etc/rc.local

添加命令以执行python程序,最好使用文件位置的绝对引用(首选完整的文件路径)。务必将行退出0 保留在末尾,然后保存文件并退出。在nano中,要退出,请键入Ctrl-x,然后键入Y.

编辑RC本地文件配置在启动时在Raspberry Pi上运行程序

如果您的程序连续运行(运行无限循环)或者可能不会退出,则必须确保通过在命令末尾添加&符号(“&”)来分叉该过程,如:

sudo python /home/pi/sample.py&

Pi将在启动时运行此程序,并在其他服务启动之前运行。如果您不包含“&”符号,并且程序连续运行,则Pi将无法完成其启动过程。&符号允许命令在单独的进程中运行,并在主进程运行时继续引导。

现在重启Pi来测试它:

sudo重启

提示

此外,请务必引用绝对文件名,而不是相对于您的主文件夹。例如,使用` / home / pi / myscript.py`  而不是` myscript.py` 。

如果将脚本添加到/etc/rc.local中,则会将其添加到引导顺序中。如果您的代码卡住,则启动序列无法继续。因此,请注意您尝试在启动时运行的代码并多次测试代码。您还可以将脚本的输出和错误写入文本文件(例如log.txt)并使用它进行调试。

sudo python /home/pi/sample.py&> /home/pi/Desktop/log.txt 2>&1

方法2:.bashrc

 

 

在启动时在Raspberry Pi上运行程序的第二种方法是修改.bashrc  文件。使用.bashrc方法,您的python程序将在引导时运行,并且每次打开新终端时,或者在建立新的SSH连接时运行。将命令放在'/home/pi/.bashrc'的底部。该程序可以在运行时使用'ctrl-c'中止!

sudo nano /home/pi/.bashrc

转到脚本的最后一行并添加:

echo在启动时运行 
sudo python /home/pi/sample.py

上面的echo语句用于显示.bashrc文件中的命令在启动时执行以及连接到bash控制台。

Bash RC配置systemd在启动时在Raspberry Pi上运行程序

现在重启Pi以听到Pi在启动时发言。

sudo重启

下图显示添加到.bashrc文件的命令即使在打开新终端时也会执行。

Bash RC配置systemd在启动时在Raspberry Pi上运行程序

方法3:init.d目录

 

 


在启动时在Raspberry Pi上运行程序的第三种方法是将程序(在启动时运行)添加到/etc/init.d 目录。此目录包含在引导过程中启动的脚本(此外,此处的所有程序都在您关闭或重新引导系统时执行)。

 

使用以下行将要在启动时运行的程序添加到init.d目录:

sudo cp /home/pi/sample.py /etc/init.d/

移至init目录并打开示例脚本

cd /etc/init.d
sudo nano sample.py

将以下行添加到示例脚本中,使其成为Linux标准库(LSB)(软件系统结构的标准,包括Linux 操作系统中使用的文件系统层次结构)init脚本。

#etet/init.d/sample.py
### BEGIN INIT INFO
#提供:sample.py
#Required-Start:$ remote_fs $ syslog
#Required-Stop:$ remote_fs $ syslog
#Default-Start:2 3 4 5
#Default-Stop:0 1 6
#Short-Description:启动时启动守护程序
#说明:启用守护进程提供的服务。
### END INIT INFO

init.d脚本需要记录上述运行时依赖项,以便可以验证当前的引导顺序,使用这些依赖项引导的顺序,以及并行运行引导脚本以加快引导过程。  

您可以按照此处的指南学习编写init.d脚本。

Initd配置systemd在启动时在Raspberry Pi上运行程序

通过更改其权限,使init目录中的示例脚本可执行。

sudo chmod + x sample.py

运行此命令:

sudo update-rc.d sample.py默认值

现在重启以听到Pi在启动时发言。

sudo重启

方法4:SYSTEMD

 

 

在启动时在Raspberry Pi上运行程序的第四种方法是使用systemd文件。systemd提供了一个标准流程,用于控制Linux系统启动时运行的程序。请注意,systemd仅可从Raspbian OS的Jessie版本获得。

步骤1-创建单元文件

使用如下命令打开示例单元文件:

sudo nano /lib/systemd/system/sample.service

添加以下文字:

 [单元]
 说明=我的样品服务
 之后= multi-user.target

 [服务]
 类型=空闲
 ExecStart = / usr / bin / python /home/pi/sample.py

 [安装]
 WantedBy = multi-user.target

您应该保存并退出nano编辑器。

配置systemd在启动时在Raspberry Pi上运行程序

这定义了一个名为“Sample Service”的新服务,我们要求在多用户环境可用时启动它。“ExecStart”参数用于指定我们要运行的命令。“Type”设置为“idle”以确保ExecStart命令仅在其他所有内容都已加载时运行。请注意,路径是绝对路径,并定义Python的完整位置以及Python脚本的位置。

为了将脚本的文本输出存储在日志文件中,您可以将ExecStart行更改为:

ExecStart = / usr / bin / python /home/pi/sample.py> /home/pi/sample.log 2>&1

单元文件的权限需要设置为644:

sudo chmod 644 /lib/systemd/system/sample.service

第2步 - 配置systemd

现在已经定义了单元文​​件,我们可以告诉systemd在引导序列期间启动它:

sudo systemctl daemon-reload
sudo systemctl enable sample.service

重新启动Pi,您的自定义服务应该运行

sudo重启

配置systemd在启动时在Raspberry Pi上运行程序

方法5:crontab

 

Raspberry Pi 1型号B +(B PLUS)512MB电脑板(2014)

通过Raspberry Pi

 

可以在此处找到有关使用crontab获取在引导时运行的程序的详细教程。

只要在启动顺序中运行Python脚本的位置并不重要,您就可以使用这些方法中的任何一种在启动时运行程序。如果您的脚本依赖于该时间点可用的任何系统功能,例如连接和可用的网络功能,则/ home / pi目录已安装并可供使用或  系统时间已由NTP更新,  那么它将理想的使用systemd或init.d方法。这些方法控制启动时执行脚本的启动点。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值