已解决:出于某种原因,让CRON运行一个运行python脚本的bash脚本解决了这个问题。
我有一个python脚本" temperature.py"这是一个无限循环,用于检查来自GPIO引脚的值,将值添加到文件中,然后使用" gdrive"上传到google驱动器。有时使用smtp发送邮件。如果我从SSH终端($ sudo python temperature.py)运行它,该脚本可以正常工作,但它在启动时并不像我希望的那样工作。 我正在使用raspbian wheezy。
我做了什么:
/etc/rc.local中的:
#...
#...
sleep 10
python /home/pi/temperature.py&
exit 0
pi正常启动,在我使用SSH登录后写:
...$ps aux
我得到:
...
root 2357 1.4 1.9 10556 8836 ? S 21:11 0:12 python /home/pi/temperature.py
...
因此我猜测它正在运行,它使用1.4%的CPU,这是非常少的,但几乎所有其他进程都使用0.0%。既然程序可能 它没有做任何事情......我的谷歌驱动器是空的......
所以如果我从终端运行它作为背景它是有效的但是如果我从rc.local运行它就没有...
我在猜测:
它缺少一些许可吗?
它一定是rc.local的东西...因为它从终端完美运行
的结果... $ ls -l temperature.py -rwxr-xr-x 1 root root 1927 Dec 12 21:10 temperature.py ... $ ls -l /etc/rc.local -rwxr-xr-x 1 root root 373 Dec 12 20:54 /etc/rc.local
我曾尝试使用cron($ sudo crontab -e)来盯着它,但它也没有用。
有什么想法吗?我觉得我错过了一些显而易见的东西,但由于我对raspberry pi和linux的东西很新,我无法在google上找到它。
脚本temperature.py
#Made by Matthew Kirk
# Licensed under MIT License, see
# http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature/LICENSE
#Adapted by me
import RPi.GPIO as GPIO
import time
import subprocess
import os
import commands
import sys
import smtplib
from email.mime.text import MIMEText
print 'TEMPERATURE LOGGER - M'
print ' '
#MAILER SETUP
to = '****@gmail.com'
gmail_user = '****@gmail.com'
gmail_password = '*****'
smtpserver = smtplib.SMTP('smtp.gmail.com',587)
#TEMP LOGGER GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.IN)
while True:
print 'fail'
if GPIO.input(7):
break
while GPIO.input(7):
pass
waitTime = 60
tempTreshold = 50
logFile = "/home/pi/tDat.csv"
while True:
dataFile = open(logFile,"a")
time_1 = time.time()
tFile = open("/sys/bus/w1/devices/28-011582ac5dff/w1_slave")
text = tFile.read();
tFile.close();
tData = text.split("\n")[1].split(" ")[9]
temp = float(tData[2:])
temp = temp/1000
timeStamp = time.strftime("%d/%m/%Y %H:%M:%S")
dataFile.write(str(temp)+","+ timeStamp+ "\n")
dataFile.close()
file_ID = commands.getoutput('drive list | tail -n +2 | head -1 | awk \'{print $1;}\' ')
cmd = 'drive delete --id '+file_ID
os.system( cmd )
cmd = 'drive upload --file '+logFile
os.system( cmd )
# MAIL IF TEMP TOO LOW
if temp < tempTreshold:
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login(gmail_user,gmail_password)
msg = MIMEText('The temperature in Branten, {}C, is below {} degrees C!!!'.format(temp,tempTreshold)+'\n'+'Recorded$
msg['Subject'] = 'Branten Temperature Warning'
msg['From'] = gmail_user
msg['To'] = to
smtpserver.sendmail(gmail_user,[to],msg.as_string())
smtpserver.quit()
sys.exit()
和CRON:
* * * * * python /home/pi/temperature.py
答案 0 :(得分:3)
考虑修改代码以不使用infinate循环。
了解Linux CRON作业。 CRON是一种服务,它将按计划(正确)执行您的程序或脚本。编辑:它默认安装在大多数Linux发行版上,包括Rasbian。
答案 1 :(得分:0)
也许nohup有帮助吗?
nohup python /home/pi/temperature.py&