2016-02-21 63 views
1

環境

  • 樹莓PI 2
  • raspbian-傑西-精簡版
  • 視窗8.1
  • 膩子0.66(SSH)

問題

無法獲取cron到ex使用sudo執行python腳本。該腳本處理GPIO輸入,所以應該用sudo調用它。程序應該保存溫度和溼度文件,但cat temp.txtcat humid.txt給了我空字符串。執行一個Python腳本包括GPIO在樹莓裨命令由cron 2

的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

(空)

我在cron試圖

  • sudo crontab -e
  • /usr/bin/python
  • chkconfig cron(在cron的)
  • sudo apt-get updatesudo apt-get upgrade
  • sudo reboot

任何幫助,將不勝感激。謝謝。

回答

1

選項1:您可以編輯/etc/crontab。在那裏您可以指定哪個用戶應該在計劃後立即執行相應的工作。

選項2:使用

sudo su 
crontab -e 

我會去的第二個選項,因爲這是在docs建議修改的root crontab中......

(免責聲明:有關GPIO採取任何擔保我只是假設你對「需要sudo」是正確的,因爲我從來沒有在raspi上做過GPIO,所以我提到只以root身份運行腳本。)

+0

謝謝。但我試過這些,問題依然存在。 – dixhom

+0

我假設腳本正在工作並在交互調用時產生輸出。當它現在以root身份運行時,我認爲它也將以root的主目錄作爲工作目錄運行。由於腳本使用相對路徑,您的文件將被放置在那裏... – flaschbier

+0

沒錯,關鍵是相對路徑。我無法找到根目錄的主目錄,因此我修復了程序,以便將數據保存到絕對路徑,並且工作正常!謝謝。 – dixhom

1

問題是相對路徑。數據保存到與我所看到的不同的地方。

更改

f = open("humid.txt","w") 

f = open("/home/dixhom/Adafruit_Python_DHT/examples/humid.txt","w") 

解決問題。