2014-11-17 10 views
0

스크립트는 센서에서 파일로 온도를 쓰는 두 개의 python 스크립트를 먼저 실행 한 다음 .sh 파일 내에서 ftp를 통해 업로드합니다.Crontab은 스크립트의 일부만 실행합니다.

.sh 파일을 수동으로 실행할 때만 온도가 업데이트됩니다. crontab이 스크립트를 실행할 때 ftp 만 업로드하지만 take_pic.py를 제외하고는 파이썬 스크립트를 실행하지 않는 것 같습니다.

  1. crontab은 루트의 crontab에서 실행됩니다.

    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 
    

    :

  2. 파이썬 파일 I 스크립트가 수동으로 모든 것을 완벽하게

ftp.sh 작동 실행하면 로그 파일은 아무것도

  • 을 표시하지 않습니다
  • 실행 가능 temp_to_file.py

    (210)
    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 
    

    및 스크립트

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

    에 대한 crontab을 :wq!

    이제 설정 권한을 저장 지금 당신의 crontab을 다시 시작합니다.

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

    이, 즉 당신이 여기에 표시되지 않은 #!/usr/bin/env bash 라인으로 시작 않습니다 당신이 당신의 ftp.sh 스크립트에 오두막을 가지고 있습니까?

    그렇지 않은 경우 추가하거나 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 작업과 같은 문제에 직면했다. 프로필이 활성화되어있을 때 셸에서 테스트하고 cron 작업이 실행되면 환경 (PATH 및 다른 것들)을 사용할 수 없습니다.

    두 개의 스크립트를 보았습니다. 첫 번째 스크립트는 OS 명령 만 사용하지만 두 번째 스크립트는 cron 작업에 사용할 수없는 temper-poll을 호출합니다.

    +1

    해결 방법은 두 가지 답변의 조합입니다 –

    0

    파이썬 인터프리터가 takePic.py 스크립트를 찾을 수 있습니다.

    cronjob은 사용자 홈 디렉토리 (예 :/home/myuser /)에서 실행되기 때문에. 따라서 스크립트의 전체 경로를 사용하십시오.

    python /some/path/takePic.py >> /some/path/python_temp.log 
    
    관련 문제