我正在尝试通过 EC2 上的 crontab 运行 Python 脚本(它是一个网络抓取)。但它不起作用。
这是我的任务:
SHELL = /bin/bash
PATH = /usr/local/sbin:/usr/local / bin: / sbin: / bin: / usr / sbin: / usr / bin
* * / 2 * * * / usr / bin / python /home/ec2-user/LATAM_v1.py
我收到系统发来的电子邮件,说 pandas 未安装。
但已经安装好了。
我也在 shell 中直接运行该脚本:
/home/ec2-user/LATAM_v1.py
/ usr / bin / python home / ec2-user / LATAM_v1.py
两种方法都有效。
我已经检查了 cron 和守护进程的状态(如果它们正在运行),确实如此。
错误如下:
From [email protected] Sun Apr 12 10:10:02 2020
Return-Path: <[email protected]>
Received: from ip-172-31-3-2.sa-east-1.compute.internal (localhost [127.0.0.1])
by ip-172-31-3-2.sa-east-1.compute.internal (8.14.4/8.14.4) with ESMTP id 03CDA2Lb008039
for <[email protected]>; Sun, 12 Apr 2020 10:10:02 -0300
Received: (from root@localhost)
by ip-172-31-3-2.sa-east-1.compute.internal (8.14.4/8.14.4/Submit) id 03CDA2W8008038;
Sun, 12 Apr 2020 10:10:02 -0300
Date: Sun, 12 Apr 2020 10:10:02 -0300
Message-Id: <202004121310.03CDA2W8008038@ip-172-31-3-2.sa-east-1.compute.internal>
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <root@ip-172-31-3-2> /usr/bin/python /home/ec2-user/LATAM_v1.py
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Traceback (most recent call last):
File "/home/ec2-user/LATAM_v1.py", line 10, in <module>
import pandas as pd
ModuleNotFoundError: No module named 'pandas'
This is the version of the machine:
NAME = "Amazon Linux AMI"
VERSION = "2018.03"
ID = "amzn"
ID_LIKE = "rhel fedora"
PRETTY_NAME = "Amazon Linux AMI 2018.03"
我已经查看了 Stackoverflow,得到了很多答案等等,但这里没有任何作用。
我对 Linux 不太熟悉。如果有人知道如何解决并一步步解释,我将不胜感激。
非常感谢。
答案1
该问题可能是 Python 路径问题。Python 包可以安装在多个位置:
/home/username/.local/lib/python3.6/site-packages
/usr/local/lib/python3.6/dist-packages/
~/project_path/venv/lib/python3.6/dist-packages/
您可能在第一个位置安装了 pandas,但 cron 运行时,python 路径中没有该位置。您可以通过在 cron 脚本中设置 python 路径来解决这个问题(使用正确的 python 版本):
PYTHONPATH=/home/username/.local/lib/python3.6/site-packages
或者你可以全局安装 pandas:
sudo -H pip install pandas
或者你可以学习使用虚拟环境在这种情况下,您需要先激活环境,可以直接在由 && 分隔的 cron 中激活,也可以创建一个 shell 脚本来激活并运行 Python,然后从 cron 调用该脚本。如果您有多个项目依赖于不同版本的 Python 或库,这是处理该问题的首选方法。