【问题标题】:Crontab not sending Sendgrid emails from Python script on AWS Linux 2Crontab 未从 AWS Linux 2 上的 Python 脚本发送 Sendgrid 电子邮件
【发布时间】:2021-06-01 19:55:27
【问题描述】:

我有一个 AWS Amazon Linux 2 机器。我正在使用 python 脚本(Python 3.7)使用 Sendgrid 作为 SMTP 服务发送电子邮件。我可以使用$ python3 send_email.py 发送电子邮件,但是,当我使用 crontab($ crontab -e 然后* * * * * python3 ~/apps/send_email.py)时,日志文件/var/log/cron 中的错误是(CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory。 crontab 按预期工作(我测试了其他 cron 命令,它们工作正常),但电子邮件部分不起作用。

这是我试图解决的问题:

  1. 以根 crontab 身份运行命令(即$ sudo crontab -e
  2. 以用户 crontab 的身份运行 crontab(即$crontab -e)),但在 crontab 命令中使用sudo python3 ...
  3. 在 crontab 文件顶部添加路径目录,以防无法解析这些目录
  4. 已安装 Postfix 以在 /usr/bin/sendmail 目录中安装某些内容,但是,由于我不需要它来使用 $ python3 send_email.py 运行由 Sendgrid 提供支持的电子邮件,所以我不确定为什么我需要通过 cron 来使用它。不过,我可能完全错了。安装 Postfix 后,它可以解决 cron 日志中的 (CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory 错误 - 在这种情况下,日志条目是 (ec2-user) CMD (python3 ~/apps/send_email.py) - 但我没有收到电子邮件。可能是因为没有为我正在使用的 SMTP 配置 Postfix (Sendgrid)。
  5. (编辑)我已将 Sendgrid 配置为通过 the Sendgrid docs 使用 Postfix,但它仍然不会向我发送电子邮件,尽管 Postfix 日志中似乎没有任何错误...
Jun  1 20:27:02 ip-[my-ip] postfix/pickup[25506]: 101769641F3: uid=1000 from=<ec2-user>
Jun  1 20:27:02 ip-[my-ip] postfix/cleanup[25508]: 101769641F3: message-id=<20210601202702.101769641F3@ip-[my-ip].us-east-2.compute.internal>
Jun  1 20:27:02 ip-[my-ip] postfix/qmgr[25507]: 101769641F3: from=<ec2-user@ip-[my-ip].us-east-2.compute.internal>, size=1165, nrcpt=1 (queue active)
Jun  1 20:27:02 ip-[my-ip] postfix/local[25510]: 101769641F3: to=<ec2-user@ip-[my-ip].us-east-2.compute.internal>, orig_to=<ec2-user>, relay=local, delay=0.01, delays=0/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jun  1 20:27:02 ip-[my-ip] postfix/qmgr[25507]: 101769641F3: removed

我的想法是,Sendgrid python 库(与sudo pip install sendgrid 一起安装)的 cron 调用中有一些失败,当 python 直接使用 CLI 中的 python3 解释器调用它时不会发生这种情况。我不知道为什么会有所不同。

【问题讨论】:

    标签: python-3.x amazon-ec2 cron sendgrid


    【解决方案1】:

    经过多次故障排除后,我终于解决了这个问题。这就是有效的方法。

    1. 我保持原来的设置不变:Sendgrid for SMTP 使用他们的 python lib(没有 Postfix 或 smtplib),使用用户 crontab(使用 $ crontab -e 而不是 $ sudo crontab -e),并使用 Python 3.7。
    2. 显然,python 脚本名称中的“电子邮件”一词可能会导致解释器问题,因此我重命名了文件以删除“电子邮件”一词。例如,send_noti.py 而不是 send_email.py
    3. 我在 python 脚本中对文件的每次调用都使用了绝对路径。我在 python 脚本的用户目录中读取、写入和执行文件以及发送电子邮件。这些 R、W、X 命令在 cron 中开始出错,但由于某种原因从 cron 外部调用时不会出错,即使在重命名文件之后也是如此。对文件的所有引用使用绝对路径修复了该问题。
    4. 我还在crontab文件中使用了python文件的绝对路径。例如,* * * * * python3 /home/ec2-user/apps/send_noti.py 而不是 * * * * * python3 ~/apps/send_noti.py
    5. 我删除了之前放入的 crontab 文件中不必要的项目,例如重新定义 PATH 目录。

    我希望这对某人有所帮助,因为我花了大约 3 周的时间进行故障排除和解决。

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2018-11-08
      • 2012-09-12
      • 2017-06-05
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多