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

  • 在rc.local
  • 的.bashrc
  • init.d选项卡
  • systemd
  • crontab中

示例程序

您可以使用任何要在启动时运行的程序; 在本教程中,我们使用的是一个示例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)

方法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.

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

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控制台。

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

sudo重启

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

方法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脚本。

通过更改其权限,使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编辑器。

这定义了一个名为“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重启

方法5:crontab

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

通过Raspberry Pi

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

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

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

  1. python程序执行三种方式,Python运行程序的三种方法

    对于python中运行程序的方法,是我们初学时就已经掌握过的了,想必大家会的只是其中的一两种方式. 本篇对程序运行的三种方式进行了整理,分别是:Python的解释器.交互式运行和PyCharm,大家在 ...

  2. python运行时很卡-Python代码运行速度慢?这五种方法很管用

    对于Python很多人还是比较了解的,虽然说Python有很多优势但同样具有劣势,Python最大的劣势就是运行效率慢,那么如何提高Python代码运行速度呢?这五种方法很管用. 1.PyPy:在选择 ...

  3. Linux:检查当前运行级别的五种方法

    2019独角兽企业重金招聘Python工程师标准>>> 运行级就是Linux操作系统当前正在运行的功能级别.存在七个运行级别,编号从0到6.系统可以引导到任何给定的运行级别.运行级别 ...

  4. mac 强制退出程序_强行退出Mac上应用程序的6 种方法

    虽然Mac os系统很流畅,但是我们在使用的时候偶尔会出现一些软件与系统不兼容情况.或者一些不良应用在我们使用的时候突然就卡主了,这时我们要么等应用恢复响应,或者干脆强制退出它,小编这里为你介绍6种快 ...

  5. raspberry pi_在Raspberry Pi上试用Docker

    raspberry pi 在Opensource.com上,我可以在日常工作中了解很多非常有趣的新兴技术. 但是我并不总是可以自己深入研究它们. 在过去的这个周末,我留出了一些时间来做. 几年来,我一 ...

  6. (四)Raspberry Pi上的人工智能人脸检测

    目录 介绍 在Raspberry Pi上安装组件 在Raspberry Pi上运行检测器 性能注意事项 下一步 在这里,我们解释了用于人脸识别的简单人脸数据库的结构,然后开发了将人脸添加到人脸数据库的 ...

  7. 在Raspberry Pi上安装HDMI-CEC

    转自https://www.labno3.com/2021/02/01/using-hdmi-cec-on-a-raspberry-pi/ HDMI-CEC是一种特殊的协议,用于电视与另一个设备通过H ...

  8. raspberry pi_如何在Raspberry Pi上使用NetBSD

    raspberry pi 您是否有旧的Raspberry Pi散布着灰尘,也许是在最近的Pi升级之后? 您对BSD Unix感到好奇吗? 如果您对这两个问题都回答"是",您将很高兴 ...

  9. 使用Exagear Desktop在raspiberry pi上运行x86程序

    有 ARM Chromebook 使用经验的朋友们应该都知道 ARM Chromebook 在可折腾性上要比 x86 的 Chromebook 要差上不少,最主要一个原因就是在 Crouton 下的 ...

  10. 树莓派支持uvi协议吗_树莓派如何控制电视机,在Raspberry Pi上安装HDMI-CEC

    在本教程中,我将展示如何使用HDMI-CEC和树莓派来控制电视. HDMI-CEC是一种特殊的协议,用于电视与另一个设备通过HDMI电缆进行通信.该协议允许电视控制另一个设备,同时也允许该设备控制电视 ...

最新文章

  1. HuggingFace BERT源码详解:基本模型组件实现
  2. 如何阅读《深入理解计算机系统》?(文末送书)
  3. REST / HTTP方法:POST与PUT与PATCH
  4. Linux基本命令 (一)
  5. a start job is running for延迟90s的解决办法
  6. 查一个字段中字符集超过30的列_Mysql 的字符集以及带来的一点存储影响
  7. Qt的特性——信号和槽
  8. pdf reference官方指南之-语法基础和文件结构
  9. 图片标注工具Labelme的安装及使用方法
  10. 那个超级浏览器好(跨境浏览器哪个好)
  11. excel中的相对引用、绝对引用和混合引用
  12. (2/2) sharex录制屏幕没有声音,升级高版本的 sharex
  13. C语言散列法求英文字母字符串求余,c语言求余数
  14. 中文实时语音识别引擎
  15. 求生之路2服务器无限刷特感,求生之路2全部联机方法一览_求生之路2怎么联机_牛游戏网...
  16. android 酷狗音乐 ip,“音乐+IP”融合模式 夯实酷狗音乐原创硬实力
  17. XAMPP+WordPress+花生壳搭建博客
  18. 微信公众号中 JavaScript 获取用户周边的标志性建筑列表
  19. 【蓝桥杯 数独填数 DFS】
  20. 电信说的几兆带宽和自己看到的下载/上传速度有什么关系

热门文章

  1. java processing_1 Processing入门简介
  2. autoCAD恐吓式销售_恐吓式软文的例子?恐吓式软文营销经典案例分享
  3. 复旦计算机对口,2019年长宁区公办初中划片电脑派位对口入学方式
  4. IBM Platform LSF在IC行业内的使用
  5. Shell命令提示符
  6. 计算机学院实验报告,大学计算机实验报告-EXCEL电子表格实验
  7. Linux系统下安装matla版libsvm
  8. iOS依赖注入框架系列(一):介绍Typhoon
  9. phyton方面相关书籍
  10. 在文档中怎么画横线实线_怎样在一个word文档中添加一根实线,用作分开不同