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

本文详细介绍在树莓派上实现程序开机自启动的四种方法,包括修改rc.local文件、创建服务脚本、通过桌面启动及使用systemctl设置服务。每种方法步骤详细,适合Linux初学者。

刚上手树莓派,也因此接触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

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

总结

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


### 使用 `crontab` 设置树莓派程序开机自启动树莓派中,可以使用 `crontab` 工具来配置程序开机自启动。`crontab` 是一个定时任务管理工具,通过特定的语法可以实现在系统动时运行指定的程序或脚本。 #### 操作步骤 1. **编辑 crontab 任务列表** 在终端中输入以下命令以编辑当前用户的 `crontab` 任务列表: ```bash crontab -e ``` 如果这是第一次使用 `crontab -e`,系统会提示选择一个文本编辑器(例如 `nano` 或 `vim`),建议选择 `nano`,因为其操作较为简单。 2. **添加开机动任务** 在打开的编辑界面中,添加以下格式的任务条目: ```bash @reboot /path/to/your/script_or_program ``` 例如,如果有一个 Python 脚本位于 `/home/pi/my_script.py`,可以使用以下命令执行: ```bash @reboot python3 /home/pi/my_script.py ``` 确保路径和命令正确无误。 3. **保存并退出** 如果使用的是 `nano` 编辑器,按下 `Ctrl + O` 保存文件,然后按下 `Ctrl + X` 退出编辑器。 4. **验证配置** 重树莓派后,可以通过检查程序是否正常运行来验证配置是否成功。也可以在终端中使用以下命令查看 `crontab` 任务列表,确认任务是否已正确添加: ```bash crontab -l ``` #### 注意事项 - **环境变量问题** 使用 `crontab` 程序时,可能会遇到环境变量与用户终端环境不一致的问题。为了避免此类问题,建议在 `crontab` 中使用绝对路径来指定程序或脚本的位置。 - **日志记录** 为了方便调试,可以将程序的输出重定向到日志文件中。例如: ```bash @reboot python3 /home/pi/my_script.py >> /home/pi/cron.log 2>&1 ``` 这会将程序的标准输出和错误输出记录到 `/home/pi/cron.log` 文件中。 - **权限问题** 如果程序需要访问硬件设备(例如 GPIO),确保运行程序的用户具有相应的权限。必要时可以使用 `sudo` 来提升权限,但需要注意安全风险。 #### 示例:配置一个 Python 脚本开机自启动 假设有一个 Python 脚本 `my_script.py`,其内容如下: ```python import time with open("/home/pi/log.txt", "a") as f: while True: f.write("Hello from cron!\n") f.flush() time.sleep(10) ``` 此脚本会每隔 10 秒向日志文件中写入一条消息。通过 `crontab` 配置该脚本开机自启动方法如下: ```bash @reboot python3 /home/pi/my_script.py >> /home/pi/cron.log 2>&1 ``` #### 推荐方法树莓派上实现开机自启动程序时,`crontab` 是一种简单且灵活的方法,特别适用于需要定时执行的任务。然而,对于需要长时间运行的服务,推荐使用 `systemd` 服务[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值