raspberrypi 树莓派+Python开机启动

最简单粗暴的方法():
EDITING RC.LOCAL(编辑rc.local文件)

在你的树莓派上,选择一个文本编辑器编辑/etc/rc.local文件。你必须使用root权限编辑,例如:

[code lang=text]
sudo vim /etc/rc.local
[/code]

在注释后面添加命令,但是要保证exit 0这行代码在最后,然后保存文件退出。

WARNING(注意)

如果你的命令需要长时间运行(例如死循环)或者运行后不能退出,那么你必须确保在命令的最后添加“&”符号让命令运行在其后台。

python /home/pi/myscript.py &

这个“&”符号允许命令运行在一个指定的进程中,然后继续运行启动进程。

另外,确保文件名使用绝对路径,而不是相对于你的home目录的相对路径。例如:使用/home/pi/myscript.py而不是用myscript.py。


方法一(linux init.d的服务方式):

1、首先写个简单的python 脚本
脚本很简单,就是树莓派上一个灯闪烁程序
文件保存在/home/pi/script/ledblink.py

[code lang=text]
#!/usr/bin/env python

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT)
while True:
try:
GPIO.output(21,True)
time.sleep(1)
GPIO.output(21,False)
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
GPIO.close()
print "exit"
[/code]

2、开机启动脚本
保存脚本为/etc/init.d/ledblink文件

[code lang=text]
#!/bin/bash
# /etc/init.d/ledblink

### BEGIN INIT INFO
# Provides: embbnux
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: ledblink initscript
# Description: This service is used to manage a led
### END INIT INFO

case "$1" in
start)
echo "Starting LED Blink"
/home/pi/script/ledblink.py &
;;
stop)
echo "Stopping ledblink"
#killall ledblink.py
kill $(ps aux | grep -m 1 'python /home/pi/script/ledblink.py' | awk '{ print $2 }')
;;
*)
echo "Usage: service ledblink start|stop"
exit 1
;;
esac
exit 0
[/code]

3、 设置python脚本开机启动

[code lang=text]
sudo chmod +x /etc/init.d/ledblink
[/code]

这样启动改脚本用service 命令就可以

[code lang=text]
sudo service ledblink start#启动
sudo service ledblink stop#停止
[/code]

最后设置开机启动就好了

[code lang=text]
sudo update-rc.d ledblink defaults
[/code]

这样就完工了,重启树莓派就会发现led自己闪烁了,停止用

[code lang=text]
sudo service ledblink stop
[/code]

参考: Run a script on start up


方法二:(使用桌面环境才有用)

用Python写了一个程式,想要在树莓派开机时自动启动,网上看了很多人说可以通过如下方式实现:

修改rc.local文件:sudo nano /etc/rc.local

在文件末尾 ,在exit 0 这一行之前,加入一行:
python /home/pi/programname

然后Ctrl+X,再选择Y退出。

可我试了多次也未能成功。我最终实现的方式如下:

在/home/pi/.config下创建一个文件夹,名称为autostart,并在该文件夹下创建一个xxx.desktop文件,文件内容如下:

[code lang=text]
[Desktop Entry]
Name=ScanTest
Comment=My Python Program
Exec=python /home/pi/ScanTest/Scan.py
Icon=/home/pi/ScanTest/Scan.png
Terminal=false
MultipleArgs=false
Type=Application
Categories=Application;Development;
StartupNotify=true
[/code]

之后sudo reboot重启,就可以看到Scan.py在树莓派启动后也自动启动了。


方法三:

要在rc.local中启动python脚本,最好将python脚本Daemon化,
请参考这里:
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

我成功在rc.local中启动了daemon化后的python脚本。