树莓派创建开机自启动任务
一、编写需要开机启动的后台任务
毕竟为了醋才能包饺子嘛~
简单写一个输出 x.hello 的demo用于测试后续的配置是否成功。
import time
# 文件路径
file_path = "/home/pi/Desktop/output.txt" # 根据具体情况修改
def write_hello():
count = 1
try:
while True:
with open(file_path, 'a') as file:
file.write(f"{count}. hello\n")
count += 1
time.sleep(1) # 每隔1秒写入一次
except KeyboardInterrupt:
print("程序被中断,正在退出...")
# 可以在这里执行清理工作或记录退出信息
if __name__ == "__main__":
write_hello()
二、具体操作
1、给予文件权限
假设文件路径:
/home/pi/Desktop/write_hello.py
终端输入:
chmod 777 /home/pi/Desktop/write_hello.py
以防文件没有权限可以执行,其实这个指令给的权限太大了,大家可以根据需求来给文件具体的权限。
2、编辑cron表
终端输入:
crontab -e
这里可以介绍一下这个指令:
在树莓派(或其他Linux系统)中,crontab -e 是用于编辑用户的定时任务表(称为“cron”表)的命令。通过 crontab -e,用户可以设置定时任务,这些任务会在指定的时间自动运行,常用于自动化脚本执行或系统维护。
- 自动化任务管理:crontab -e 可以帮助用户定期执行脚本或命令,比如每天备份数据、每小时检查系统状态等。
- 调度命令:可以设定任务在特定的分钟、小时、日、月或星期几执行,或者使用特殊的间隔符(例如 @reboot,在系统重启时执行)。
- 独立于用户会话:使用 crontab 设置的任务在后台独立运行,无需用户手动启动,即使退出会话也会执行。
具体用法这里就不详细介绍了!!
第一次打开的时候会显示选择编辑器,我这里选择了nano编辑器。
在crontab编辑器当中添加指令:
@reboot /usr/bin/python3 /home/pi/Desktop/write_hello.py &
下面具体介绍一下指令的作用:
- @reboot:表示在每次树莓派重启时执行这个命令。
- /usr/bin/python3:这是 Python3 的解释器路径,通常在树莓派上是/usr/bin/python3,可以通过 which python3 命令确认。
- /home/pi/Desktop/write_hello.py:这是你的 Python 脚本路径、
- &:让脚本在后台运行,这样它不会阻塞系统的其他启动进程。
编辑好之后保存、退出编辑器。
3、检查是否编辑成功
终端输入:
crontab -l
可以检查是否修改成功。
4、重启测试程序是否成功执行
终端输入:
sudo reboot
进行重启设备,之后就可以在路径下查看是否生成了output.txt文件了。如果你有看见,就说明配置成功了~~
5、杀死后台程序
从上面在cron表当中的指令可以看到有&这个标志,说明程序是在后台一直执行的,也就意味着无法通过终端直接关闭这个程序,此时可以通过查询文件的PID来杀死进程。
终端输入:
ps aux | grep write_hello.py
通过ps来查找后台程序,使用grep匹配write_hello.py这个程序
会有如下的输出:
pi 1234 0.0 0.1 26756 2404 pts/0 S 10:00 0:00 python3 /home/pi/Desktop/write_hello.py
pi 5678 0.0 0.0 13976 876 pts/1 S+ 10:01 0:00 grep --color=auto write_hello.py
这里需要强调一下只有第一个python3 /home/pi/Desktop/write_hello.py才是后台执行的程序,第二个虽然也匹配到了write_hello.py,但实际上只是grep指令进行匹配的后台程序,如果执行要匹配python执行的后台程序,可以将指令改为:
ps aux | grep "[w]rite_hello.py"
这样输入就类似:
pi 1234 0.0 0.1 26756 2404 pts/0 S 10:00 0:00 python3 /home/pi/Desktop/write_hello.py
查询到程序的PID为1234,直接使用kill指令杀掉即可。
终端输入:
kill 1234
即可关闭这个后台任务了。