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

制作测试脚本

首先我们需要制作一个脚本来测试自启动是否有效。在终端下输入并回车新建脚本文件testboot.shpi@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

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

总结

除了通过桌面启动以外,其他方式在执行启动代码的时候都是用root用户在执行的,所以需要特别注意权限的问题,最好就全部都指定到pi用户去执行。除了可以执行脚本之外,也可以启动自己写的程序或者python脚本,需要注意的是如果自启动的程序有依赖于其他服务则必须等待其他服务加载完毕才能正常启动,保险的做法延时后再启动。

树莓派开机自动运行_树莓派程序开机自启动方法总结相关推荐

  1. linux 嵌入上电自动运行,如何在linux嵌入式开发板上开机自动运行用户应用程序...

    开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中.有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的S ...

  2. C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)...

    #region//开机自动运行         private void CB_Auto_CheckedChanged(object sender, EventArgs e)         {//C ...

  3. 树莓派开机自动运行shell脚本——记录开机时间

    目录 1.目的 2.思路 3.实现步骤 1.目的:树莓派开机时自动执行某些脚本,不用手动设置,减少麻烦. 2.思路:新建一个记录时间的脚本 record_time.sh,然后添加执行命令到 /etc/ ...

  4. 树莓派c语言运行_树莓派完成简单的编程(四)

    在上一篇文章中,我们学习了Vi文本编辑器,那么用它可以实现什么功能呢? 树莓派python以及c语言编程 这里我选择了最简单和很流行的两种编程语言: C语言和Python.实现最简单的功能,输出hel ...

  5. outlook邮箱显示一直启动中_win10outlook邮箱怎么设置开机自动运行 - 卡饭网

    windows xp系统下如何设置开机自动运行程 windows xp系统下如何设置开机自动运行程 设置开机自动运行的步骤方法如下: 点击桌面左下角开始菜单,运行设置中的控制面板. 在打开的控制面板中 ...

  6. 树莓派Java程序运行_树莓派上Java程序作为linux服务并开机自动启动

    http://www.iigrowing.cn/shu_mei_pai_shang_java_cheng_xu_zuo_wei_linux_fu_wu_bing_kai_ji_zi_dong_qi_d ...

  7. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里 --------引用---------------------- 在完成 run level 3 ...

  8. java开机自动运行,怎么用java实现程序开机自动运行

    当前位置:我的异常网» J2SE » 怎么用java实现程序开机自动运行 怎么用java实现程序开机自动运行 www.myexceptions.net  网友分享于:2013-02-17  浏览:69 ...

  9. Android实现开机自动运行程序

    有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以"Don't call me, I'll c ...

  10. 开机自动运行程序怎么关闭

    开机自动运行程序怎么关闭 开机自启动程序关闭方法图解 作者:佚名  字体:[增加 减小] 来源:互联网 时间:06-12 17:25:04 我要评论 一大堆开机自动启动的软件导致系统巨慢,比如说刚开机 ...

最新文章

  1. sql server 关键字 三
  2. 用形态学的方法实现图像的角点检测
  3. 本地通过域名访问虚拟机的网站部署方法(Nginx)
  4. sqlite性能优化
  5. Jmeter之逻辑控制器(Logic Controller)
  6. ArcGIS没有或未启动Spatial Analyst许可
  7. java自定义按钮代码_用于短代码的WP Tiny MCE帖子编辑器上的自定义按钮
  8. js王者归来之正则表达式
  9. 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  10. 采用静态编译方式防止易语言小程序被误杀
  11. 计算机实战项目之 [含论文+任务书+中期检查表+答辩PPT+源码等]基于javaweb大学生助学贷款管理系统
  12. 软件工程之系统架构图和系统架构描述
  13. 用conda建一个python2虚拟环境
  14. 附合导线简易平差(4500PA)
  15. java秃顶_【本人秃顶程序员】在Java中使用函数范式提高代码质量
  16. Android 个人中心页面前端代码
  17. 计算机无法u盘启动,用u盘启动不了电脑没反应,教你用u盘启动不了电脑没反应怎么办...
  18. 关于C之文件结尾EOF与二进制文件换行符
  19. Redis高可用——主从复制、哨兵模式、集群
  20. 须知少年凌云志,曾许天下第一流

热门文章

  1. 导论 计算机组成 ppt,《计算机导论》说课稿PPT课件.ppt
  2. Ubuntu:安装yarn
  3. icem合并面网格_ICEM CFD混合网格
  4. Python绘制XRD图谱和对应pdf卡片堆叠图
  5. 信息学奥赛NOIP/CSP-J初赛知识点汇总
  6. Android ViewPage使用
  7. VS2017 插件的安装目录
  8. 2021年口腔正畸行业隐形矫治器专题研究报告
  9. java开发手册 - 码出规范 - 要点整理
  10. SpringBoot整合editormd富文本编辑器