2017-04-18 129 views
0

有誰知道爲什麼音頻不會通過cron作業運行,即使它通過命令行運行時運行得非常好。我有一個通過藍牙揚聲器播放音頻的python腳本,當我在命令行(python helper.py)上運行它時,它運行良好,但通過cron運行似乎不起作用。音頻通過Cron作業

額外的細節:

我上,我已經連接到藍牙揚聲器樹莓派這樣做。 我已經連接到樹莓派顯示器(不這樣做是無頭的,但是這是最終目標)

這裏是我的測試代碼只是音頻

import pygame 
from pygame import mixer 


def playFile(filePath): 
    pygame.mixer.init() 
    pygame.mixer.music.load(filename) 
    pygame.mixer.music.play() 
    print('I am here') 
    while pygame.mixer.music.get_busy(): 
    continue 

playFile('/home/pi/AlarmClock/alarm2.ogg') 

這包括我的音頻播放的定義功能和實際的通話。

讓我知道,如果我可以提供更多的信息來澄清這一點。

編輯1:

我已經考慮到了一些建議和修改了我的代碼一點點。

我的crontab現在看起來像下面

* * * * * /usr/bin/python /home/pi/AlarmClock/helper.py > /home/pi/AlarmClock/output.out 

這僅僅發送python腳本的輸出到文件output.out

的helper.py文件也被更新

import sys 
import pygame 
from pygame import mixer 

#fp = open('/home/pi/AlarmClock/erurfile.txt', 'a') 
#sys.stdout = sys.stderr = fp 

print('at the top') 
# Playing media files 
def playFile(fileName): 
    pygame.mixer.init() 
    pygame.mixer.music.load(fileName) 
    pygame.mixer.music.play() 
    print('in the method') 
    while pygame.mixer.music.get_busy(): 
     continue 

print('about to run method') 
playFile('/home/pi/AlarmClock/alarm2.ogg') 
print('finished running method') 

編輯解決!: 這個問題完全解決了這個問題。 Audio doesn't play with crontab on Raspberry Pi

+1

你的cron定義是什麼?我的假設是你沒有正確調用腳本。 –

+0

* * * */usr/bin/python /home/pi/AlarmClock/helper.py – Jay

+1

如果你的腳本依賴於像〜/ .bashrc中定義的env vars這樣的任何設置,它們必須是明確的源代碼...... cronjobs不會調用一個shell就像打開一個終端會...也cronjobs不給TTY不知道,如果這可能會限制訪問音頻設備的能力 –

回答

1

這個問題可能出現在很多地方,所以下面的步驟應該可以幫助識別出哪裏斷了。

我會開始創建一個shell腳本,從cron運行並檢查它的工作原理。因此,創建一個名爲my_cron_job.sh的文本文件有以下幾行:

#!/bin/sh 
date >> /tmp/cron.log 2>> /tmp/cron.err 

修改你的cron作業運行my_cron_job.sh每一分鐘,你應該在/tmp/cron.log文件的新線。 /tmp/cron.err應該是空的。

接下來的問題是「我們可以從cron運行Python腳本嗎?」。我不是一個Python的人,所以我會假設你有一個具有像一個「HelloWorld.py」:

print('Hello World') 

現在,我們需要從我們的cron作業運行這個選項以便編輯my_cron_job.sh閱讀:

#!/bin/sh 
python HelloWorld.py >> /tmp/cron.log 2>> /tmp/cron.err 

當您檢查/tmp/cron.log時,它現在應該每分鐘出現一個「Hello World」。如果情況並非如此,那麼你需要弄清楚爲什麼,這可能是環境問題。如果您需要添加到環境中,例如修改PATH,然後在python命令之前執行此操作。

你可能有這樣的事情:

#!/bin/sh 
PATH=$PATH:/usr/local/bin 
python HelloWorld.py >> /tmp/cron.log 2>> /tmp/cron.err 

如果你能得到HelloWorld.py運行,那麼你應該能夠得到您的音樂播放器來運行。

其他一些注意事項:

  • 的Cron通常會通過電子郵件發送給你的命令,這應有助於輸出。你可能需要在Pi上安裝一個簡單的文本郵件客戶端來獲取(我非常老派,就像mailx一樣)。
  • 正如我所說的我不知道Python,但程序的末尾看起來像它處於一個緊密的循環中,等待get_busy()爲假。至少我會在這裏插入某種形式的睡眠,或尋找更好的方法。

祝你好運。

+0

感謝您的所有建議!我會盡全力回覆你。乾杯! – Jay

+0

這是另一個更新。因此,我更新了我的crontab以運行以下'* * * * */usr/bin/python /home/pi/AlarmClock/helper.py> /home/pi/AlarmClock/helper.py' 我的helper.py代碼爲4代碼中的打印語句只是告訴我它在代碼中的位置(在頂部,在方法中,在方法調用之後,在方法調用之後) 我的輸出文件成功地包含4條消息,表示文件已運行,但出於某種原因,輸出沒有發送到我連接的藍牙揚聲器。 – Jay