Crontab在raspberry pi上启动python脚本导致导入错误

时间:2017-03-18 01:40:32

标签: python linux bash shell crontab

我在我的Raspberry PI上运行Ubuntu Mate。我用Python写了一个web scrapper,我想每天运行一次。我认为使用sudo crontab -e将是一种很好的方式。我遇到的问题是当cronjob启动我的python脚本时,python脚本会抛出导入错误而不会运行。但是,当我直接从命令行执行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

sudo 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)elmer@elmer-rpi:$ 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 个答案:

答案 0 :(得分:1)

问题是你自己运行脚本,但是你把它作为root用户放在cron中。这两个不同的用户有着非常不同的环境。

您应该使用val代替crontab -e将其放入您自己帐户的cron中。您也可以从cron命令行的开头删除sudo crontab -e,因为这是默认设置。

如果它仍然不起作用,解决方案可能在您的常规shell中sh,然后将该设置添加到cron:

echo $PYTHONPATH

不使用PYTHONPATH=/your/path/here * * * * * python /home/elmer/web_scraper.py >> /home/elmer/cron.log 2>&1 的另一个好理由是,如果您以root用户身份运行脚本,那么它所带来的任何错误都可能会破坏您的系统。