2014-11-17 4 views
0

В моем скрипте сначала выполняются два сценария python, которые записывают температуру от датчика к файлу, который затем загружается через ftp из файла .sh.Crontab запускает только часть моего скрипта

По какой-то причине температура обновляется только при запуске файла .sh вручную. Когда crontab запускает скрипт, он загружает только ftp, но, похоже, он не запускает скрипты python, за исключением take_pic.py.

  1. Кронтаб выполнен из кронтаба корня.
  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 

и сохранить кронтаб :wq!

Теперь установить разрешение для сценария

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

Теперь перезапустите ваш кронтаб.

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

У вас есть притон в вашем ftp.sh сценарии, т.е. он начинается с #!/usr/bin/env bash линии, которую вы не показать здесь?

Если это не так, вам нужно либо добавить его, либо в свой кронтаб, вы должны запустить bash /root/ftp.sh. В противном случае ваш скрипт будет выполнен неправильно.

+0

не устранил проблему. –

1

>> If I run the script manually everything works perfectly

Вы можете включать в свой .bash_profile в /root/ftp.sh перед запуском любой команды.

. /root/.bash_profile

Я часто столкнулись с проблемами, как это с хрон рабочих мест. Вы проверяете их в оболочке, когда ваш профиль активен, и когда выполняется задание cron, среда (PATH и другие вещи) недоступна.

Я посмотрел на ваши два сценария, первый использует только команды ОС, а второй вызывает опрос температуры, который может быть недоступен для задания cron.

+1

Решение представляет собой комбинацию двух ответов –

0

Вполне вероятно, что интерпретатор python не сможет найти скрипт takePic.py.

Поскольку cronjob выполняется в домашнем каталоге пользователей (например .:/home/myuser /). Поэтому используйте полный путь к вашему сценарию:

python /some/path/takePic.py >> /some/path/python_temp.log 
Смежные вопросы