热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【教程】树莓派程序开机自启动方法总结

【教程】树莓派程序开机自启动方法总结oldfool关注2017.10.0717:11*字数1281阅读23109评论10喜欢10赞赏1刚上手树莓派,也因此接触Li

【教程】树莓派程序开机自启动方法总结

96 oldfool 关注

2017.10.07 17:11* 字数 1281 阅读 23109评论 10喜欢 10赞赏 1

刚上手树莓派,也因此接触Linux,对Linux系统很多机制都不熟悉,先前想把自己写的一个程序随树莓派开机启动,搜寻并尝试了网上各种方法,经过一番折腾,总结了四种实现开机自启动的方法。


制作测试脚本

首先我们需要制作一个脚本来测试自启动是否有效。在终端下输入并回车新建脚本文件testboot.sh


pi@raspberry:~ $ nano testboot.sh


testboot.sh文件内容如下:


#!/bin/sh

touch /home/pi/testboot.txt

chmod 777 /home/pi/testboot.txt

echo "hello pi~" >> /home/pi/testboot.txt


测试脚本将打印字符串到文件中。按ctrl+o保存文件,再按ctrl+x退出编辑器。

给脚本文件添加执行权限:


pi@raspberry:~ $ chmod 777 testboot.sh


测试一下脚本功能:


pi@raspberry:~ $ ./testboot.sh


执行正常的话会在当前目录(pi)生成一个testboot.txt的文本文件。显示文件内容:


pi@raspberry:~ $ cat testboot.txt



 




添加自启动

方法一:向rc.local文件添加启动代码

修改rc.local文件,在终端输入并回车:


pi@raspberry:~ $ sudo nano /etc/rc.local


在打开的文本中找到exit 0,在此之前添加的代码在启动时都会被执行,在exit 0 之前添加一行代码:


su pi -c "exec /home/pi/testboot.sh"


ctrl+o保存,ctrl+x退出,然后在终端输入:sudo reboot ,重启系统测试。

su命令是指定在pi用户下执行这条命令,-c 表示执行完这条命令之后恢复原来的用户。

注意:系统启动时在执行这段代码时是使用root用户权限的,如果不指定pi用户,可能会因为权限问题导致脚本执行失败。


方法二:将程序作为服务启动

在/etc/init.d/目录下新建一个服务脚本文件。在终端输入并回车


pi@raspberry:~ $ sudo nano /etc/init.d/testboot


在空白文件中输入以下内容:


#!/bin/sh

#/etc/init.d/testboot

### BEGIN INIT INFO

# Provides:testboot

# Required-Start:$remote_fs $syslog

# Required-Stop:$remote_fs $syslog

# Default-Start:2 3 4 5

# Default-Stop:0 1 6

# Short-Description: testboot

# Description: This service is used to start my applaction

### END INIT INFO

case "$1" in

     start)

     echo "start your app here."

     su pi -c "exec ~/testboot.sh"

     ;;

     stop)

     echo "stop your app here."

     ;;

     *)

     echo "Usage: service testboot start|stop"

     exit 1

     ;;

esac

exit 0


ctrl+o保存,ctrl+x退出。

设置脚本可执行权限:


pi@raspberry:~ $ sudo chmod 777 /etc/init.d/testboot


最后将该脚本作为服务设置开机自动加载:


pi@raspberry:~ $ sudo update-rc.d testboot defaults


sudo reboot 重启测试。

方法三:通过桌面启动

此方法是在加载了桌面后再启动我们自定义的程序,因此需要安装带有桌面的版本,如果不是请跳过。

在/home/pi/.config/目录下新建一个名为 autostart 的文件夹:


pi@raspberry:~ $ mkdir .config/autostart


在 autostart 目录下新建testboot.desktop (经测试名字任意,但后缀必须是.desktop):


pi@raspberry:~ $ nano .config/autostart/testboot.desktop


文件内容如下:


[Desktop Entry]

Type=Application

Name=testboot

NoDisplay=true

Exec=/home/pi/testboot.sh


sudo reboot 重启测试。

注意:这个方法除了依赖桌面之外,如果开启了多个桌面则会导致自定义的程序多次启动。比如系统启动桌面会调用一次testboot.sh脚本,如果再用远程桌面登录到树莓派,脚本会再执行一次。


方法四:使用systemctl设置服务

在/usr/lib/systemd/system/ 下新建文件testboot.service:


pi@raspberry:~ $ sudo nano /usr/lib/systemd/system/testboot.service


如果目录system不存在,请自行创建:


pi@raspberry:~ $ sudo mkdir /usr/lib/systemd/system


testboot.service文件内容如下:


[Unit]

Description=testboot

[Service]

Type=oneshot

ExecStart=/home/pi/testboot.sh

[Install]

WantedBy=multi-user.target


这里直接指定启动文件的路径,无法指定到pi用户执行,所以只能在root用户下执行。

设置服务自启动:


pi@raspberry:~ $ sudo systemctl enable testboot.service


注意:这个方法与方法二类似都是通过服务启动,所以如果两种方法同时使用要注意不能使用同个服务名。


推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • FreeBSD环境下PHP GD库安装问题的详细解决方案
    在 FreeBSD 环境下,安装 PHP GD 库时可能会遇到一些常见的问题。本文详细介绍了从配置到编译的完整步骤,包括解决依赖关系、配置选项以及常见错误的处理方法。通过这些详细的指导,开发者可以顺利地在 FreeBSD 上完成 PHP GD 库的安装,确保其正常运行。此外,本文还提供了一些优化建议,帮助提高安装过程的效率和稳定性。 ... [详细]
author-avatar
tuitu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有