在 Raspberry Pi 2 中通过 cron 执行包含 GPIO 命令的 python 脚本
Executing a python script including GPIO commands by cron in Raspberry Pi 2
环境
- Raspberry Pi 2
- raspbian-jessie-lite
- Windows 8.1
- 腻子 0.66(SSH)
问题
无法让 cron 使用 sudo 执行 python 脚本。该脚本处理 GPIO 输入,因此应使用 sudo 调用它。该程序应该将温度和湿度保存到文件中,但 cat temp.txt
和 cat humid.txt
给了我空字符串。
crontab
sudo crontab -e
* * * * * python /home/dixhom/Adafruit_Python_DHT/examples/temphumid.py 1>>/tmp/cronoutput.log 2>>/tmp/cronerror.log
python 脚本
#!/usr/bin/python
import sys
import Adafruit_DHT
import datetime
# Adafruit_DHT.DHT22 : device name
# 4 : pin number
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
if humidity is not None:
f = open("humid.txt","w")
str = '{0}, {1}'.format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"), humidity)
f.write(str)
else:
print 'Failed to get reading. Try again!'
sys.exit(1)
if temperature is not None:
f = open("temp.txt","w")
str = '{0}, {1}'.format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"), temperature)
f.write(str)
else:
print 'Failed to get reading. Try again!'
sys.exit(1)
cronerror.log 和 cronoutput.log
(空)
我试过的
sudo crontab -e
/usr/bin/python
在 cron
chkconfig cron
(cron 开启)
sudo apt-get update
sudo apt-get upgrade
sudo reboot
如有任何帮助,我们将不胜感激。谢谢。
选项 1:您可以编辑 /etc/crontab
。在那里,您可以指定哪个用户应在计划后的一列中立即执行相应的作业。
选项 2:使用
编辑 root
的 crontab
sudo su
crontab -e
我会选择第二个选项,因为这是 docs 建议的...
(免责声明:不对 GPIO 的东西做出任何保证。我只是假设你对 "needs sudo" 的看法是正确的,因为我从来没有在 raspi 上做过 GPIO。所以我提到了 运行 一个脚本仅作为 root。)
问题是相对路径。数据被保存到与我正在查看的不同的地方。
改变
f = open("humid.txt","w")
至
f = open("/home/dixhom/Adafruit_Python_DHT/examples/humid.txt","w")
解决问题。
环境
- Raspberry Pi 2
- raspbian-jessie-lite
- Windows 8.1
- 腻子 0.66(SSH)
问题
无法让 cron 使用 sudo 执行 python 脚本。该脚本处理 GPIO 输入,因此应使用 sudo 调用它。该程序应该将温度和湿度保存到文件中,但 cat temp.txt
和 cat humid.txt
给了我空字符串。
crontab
sudo crontab -e
* * * * * python /home/dixhom/Adafruit_Python_DHT/examples/temphumid.py 1>>/tmp/cronoutput.log 2>>/tmp/cronerror.log
python 脚本
#!/usr/bin/python
import sys
import Adafruit_DHT
import datetime
# Adafruit_DHT.DHT22 : device name
# 4 : pin number
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
if humidity is not None:
f = open("humid.txt","w")
str = '{0}, {1}'.format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"), humidity)
f.write(str)
else:
print 'Failed to get reading. Try again!'
sys.exit(1)
if temperature is not None:
f = open("temp.txt","w")
str = '{0}, {1}'.format(datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S"), temperature)
f.write(str)
else:
print 'Failed to get reading. Try again!'
sys.exit(1)
cronerror.log 和 cronoutput.log
(空)
我试过的
sudo crontab -e
/usr/bin/python
在 cronchkconfig cron
(cron 开启)sudo apt-get update
sudo apt-get upgrade
sudo reboot
如有任何帮助,我们将不胜感激。谢谢。
选项 1:您可以编辑 /etc/crontab
。在那里,您可以指定哪个用户应在计划后的一列中立即执行相应的作业。
选项 2:使用
编辑root
的 crontab
sudo su
crontab -e
我会选择第二个选项,因为这是 docs 建议的...
(免责声明:不对 GPIO 的东西做出任何保证。我只是假设你对 "needs sudo" 的看法是正确的,因为我从来没有在 raspi 上做过 GPIO。所以我提到了 运行 一个脚本仅作为 root。)
问题是相对路径。数据被保存到与我正在查看的不同的地方。
改变
f = open("humid.txt","w")
至
f = open("/home/dixhom/Adafruit_Python_DHT/examples/humid.txt","w")
解决问题。