2014-11-17 61 views
0

我的腳本首先執行兩個將溫度從傳感器寫入文件的腳本,然後通過ftp從.sh文件中上傳文件。Crontab只運行我的腳本的一部分

出於某種原因,只有手動運行.sh文件時溫度纔會更新。當crontab運行腳本時,它只會上傳ftp,但似乎不運行python腳本,除了take_pic.py。

  1. crontab是從root的crontab執行的。
  2. 蟒蛇文件是可執行
  3. 日誌文件沒有顯示任何
  4. 如果我運行該腳本手動一切完美

ftp.sh:

echo "Run :$(date)" >> python_temp.log 
python write_temp.py >> python_temp.log 

python temp_to_file.py >> python_temp_to_file.log 

#raspistill -o snapshot2.jpg -n -w 1280 -h 720 

python takePic.py 
sleep 3 
HOST=XX    #This is the FTP servers host or IP address. 
USER=XX    #This is the FTP user that has access to the server. 
PASS=XX    #This is the password for the FTP user. 
NOW=$(date +"%c") 

# echo beginne upload 
    touch work 
    ftp -inv $HOST << EOF 
user $USER $PASS 
cd /bilder/ 
put snapshot2.jpg 
rename snapshot2.jpg snapshot.jpg 

put temp.js 

bye 
EOF 
# echo erfolgreicher upload 

temp_to_file.py

import subprocess 
import datetime 
import sys 

output = subprocess.check_output("temper-poll -q -c" , shell=True) 
output = output.rstrip() 

#write to file 


fobj_out = open("temp.js","w") 
fobj_out.write('document.write("' + output + '*C ");') 
fobj_out.close() 

的crontab:

*/5 * * * * /root/ftp.sh 
+0

發佈您的crontab語法。你有沒有通過http://stackoverflow.com/tags/crontab/info?有很好的調試信息。 – fedorqui

+0

我認爲問題在於subprocess_check_output不能與crontab配合使用 –

+0

您可能需要使用完整路徑,因爲crontab不知道它在哪裏運行。檢查我提供的鏈接,有很好的信息。 – fedorqui

回答

0

主要是由於腳本文件權限和腳本文件的所有權而發生此問題。我面臨同樣的問題。我發現我的代理人不是超級用戶e.g. root.

因此,您必須將您的代碼的權限和所有權設置爲超級用戶。在下面找到。

首先以超級用戶的身份編輯你的crontab。

[[email protected]] crontab -e 

和保存的crontab :wq!

現在設置權限腳本

[[email protected]] chmod +x script.sh 
[[email protected]] chown root:root script.sh 

現在重新啓動你的crontab。

[[email protected]] /etc/init.d/crond restart 
0

你有你的ftp.sh腳本認領,即它有一個#!/usr/bin/env bash行,你沒有在這裏展示了麼?

如果沒有,您需要添加它,或者在您的crontab中,您必須運行bash /root/ftp.sh。否則你的腳本將無法正確執行。

+0

命名的修改沒有解決問題 –

1

>> If I run the script manually everything works perfectly

可以包括運行任何命令之前在/root/ftp.sh你的.bash_profile。

. /root/.bash_profile

我經常遇到的問題是這樣用cron作業。您在配置文件處於活動狀態時在shell中測試它們,並在運行cron作業時環境(PATH和其他內容)不可用。

我查看了你的兩個腳本,第一個腳本只使用OS命令,但第二個腳本調用可能無法用於cron作業的temper-poll。

+1

解決方案是兩個答案的組合 –

0

python解釋器很可能找不到takePic.py腳本。

因爲cronjob是在用戶主目錄(例如:/ home/myuser /)中執行的。因此,請使用腳本的完整路徑:

python /some/path/takePic.py >> /some/path/python_temp.log