2017-03-18 64 views
0

私はRaspberry PIにUbuntu Mateを実行しています。私はPythonで1日1回実行したいWebスクラップを書きました。私はsudo crontab -eを使って、やり方を考えるのが良いと思いました。私が抱えている問題は、cronjobが私のpythonスクリプトを起動し、pythonスクリプトがインポートエラーをスローして実行されないときです。しかし、Pythonスクリプトをコマンドラインから直接実行すると、問題なく実行されます。Crontabがraspberry piでpythonスクリプトを起動するとインポートエラーが発生する

私は一部の人がシェルスクリプトを使用してpythonスクリプトを起動していることを読んでいたので、私もそれを試しました。コマンドラインから直接シェルスクリプトを実行すると、期待通りに動作しますが、cronjobで実行した場合は動作しません。

今のところテストのために、私はcronjobを実行して、何が起こっているか把握します。期待通りに機能したら、実行する時間を私が望むものに近いものに変更します。

私のファイルがどのように見えるかを知るには、以下を確認してください。ご覧のように、実行する必要のあるファイルはすべてprilivagesを実行しています。

web_scraper.py

#!/usr/bin/env python 

import click 
import logging 
import os 
from datetime import datetime 
from bs4 import BeautifulSoup as bs 
import re 
import urlparse 
... 

#!/bin/bash 

cd /home/elmer/ 

python web_scraper.py 

須藤のcrontab -e

* * * * * sh /home/elmer/start.sh >> /home/elmer/cron.log 2>&1 

cron.log start.sh

Traceback (most recent call last): 
    File "web_scraper.py", line 6, in <module> 
    import click 

件のls -lh

(py27)[email protected]:$ ls -lh 
total 56K 
-rw-rw-r-- 1 elmer elmer 2.9K Mar 17 20:38 cron.log 
-rwxrwxrwx 1 elmer elmer 8.2K Mar 16 09:54 web_scraper.py 
-rwxrwxrwx 1 elmer elmer 64 Mar 17 20:02 start.sh 

答えて

1

問題はあなた自身としてあなたのスクリプトを実行しているが、その後rootとしてのcronでそれを置くことです。これらの2人の異なるユーザーは非常に異なる環境を持っています。

sudo crontab -eの代わりにcrontab -eを使用して、自分のアカウントのcronに入れてください。また、デフォルトであるように、shをcronコマンドラインの先頭から削除することもできます。その後、

それはまだ動作しない場合は、解決策は、あなたの通常のシェルでecho $PYTHONPATHする可能性がある、のcronに設定することを追加します:sudo crontabを使用しない

PYTHONPATH=/your/path/here 
* * * * * python /home/elmer/web_scraper.py >> /home/elmer/cron.log 2>&1 

もう一つの良い理由は、あなたを実行した場合ということですスクリプトをrootとして実行すると、バグによってシステムが壊れる可能性があります。

関連する問題