2017-03-18 120 views
0

我在Raspberry PI上運行Ubuntu Mate。我用Python編寫了一個網頁報廢器,我想每天運行一次。我想通過使用sudo crontab -e將是一種很好的方法。我遇到的問題是當cronjob啓動我的python腳本時,python腳本拋出一個導入錯誤並且不運行。但是,當我直接從命令行執行python腳本時,它的運行沒有問題。Crontab在樹莓派上啓動python腳本會導致導入錯誤

我讀到有人用shell腳本啓動它們的python腳本,所以我也試過了。同樣,當我直接從命令行執行shell腳本時,它會按預期工作,但在由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 
... 

start.sh
#!/bin/bash 

cd /home/elmer/ 

python web_scraper.py 

須藤的crontab -e

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

cron.log
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

的問題是,你正在運行的腳本自己,但你把它在cron爲根。這兩個不同的用戶具有非常不同的環境。

你應該只使用crontab -e而不是sudo crontab -e把它放在你自己帳戶的cron。您也可以從cron命令行的開頭刪除sh,因爲這是默認設置。

在情況下,它仍然無法正常工作,解決方案很可能echo $PYTHONPATH在常規shell,然後添加設置與cron:

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

另一個很好的理由不使用sudo crontab是,如果你運行你腳本作爲根,它有任何錯誤可能會毀了你的系統。