gpt4 book ai didi

python - Crontab 在树莓派上启动 python 脚本导致导入错误

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:18 24 4
gpt4 key购买 nike

我正在我的 Raspberry PI 上运行 Ubuntu Mate。我用 Python 写了一个网络 scraper,我想每天运行一次。我认为使用 sudo crontab -e 会是一个很好的方法。我遇到的问题是当 cronjob 启动我的 python 脚本时,python 脚本抛出导入错误并且不运行。但是,当我直接从命令行执行 python 脚本时,它运行没有问题。

我读到有人使用 shell 脚本来启动他们的 python 脚本,所以我也试了一下。同样,当我直接从命令行执行 shell 脚本时,它按预期工作,但在 cronjob 执行时不起作用。

出于测试目的,现在我让 cronjob 每分钟执行一次,直到我弄清楚发生了什么。一旦它按预期工作,我会将它的执行时间更改为更接近我想要的时间。

为了让您了解我的文件是什么样子,请在下面查看。如您所见,所有需要运行的文件都具有执行权限。

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

开始.sh

#!/bin/bash

cd /home/elmer/

python web_scraper.py

sudo crontab -e

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

定时日志

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

最佳答案

问题是您以自己的身份运行脚本,然后以 root 身份将其放入 cron。这两个不同的用户有非常不同的环境。

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

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

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

不使用 sudo crontab 的另一个很好的理由是,如果您以 root 身份运行脚本,它的任何错误都可能毁掉您的系统。

关于python - Crontab 在树莓派上启动 python 脚本导致导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42869518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com