【问题标题】:Crontab not able to call mailx used via python subPrrocessCrontab 无法调用通过 python subProcess 使用的 mailx
【发布时间】:2020-11-03 16:28:00
【问题描述】:

我有一个 python 文件(比如 mail_it.py),我在其中编写了一个函数来发送邮件。 代码如下:-

def send_mail(recipient, subject, file_to_mail, body):
try:
    process = subprocess.Popen(['mailx', '-s', subject,'-a',file_to_mail, recipient], stdin=subprocess.PIPE)
except Exception as error:
  print(error)
process.communicate(body)

send_mail('abc@example.com', 'subject', 'file_name', 'body')

当我通过 unix 命令直接运行这个 python 文件时:

python3 mail_it.py

它发送邮件。但是当我将此文件设置为通过 crontab 运行时。我收到以下错误:

[Errno 2] No such file or directory: 'mailx': 'mailx'

提前致谢!

【问题讨论】:

  • 我的 contab 条目如下所示: 53 11 * * * 。 ~/.profile; python3 path/to/file/mail_it.py

标签: python-3.x linux cron


【解决方案1】:

这是您的流程环境的问题,更具体地说是 $PATH。

如果你从你的 shell 运行它,它将在你的 $PATH 上。

找出你的mailx程序在哪里

which mailx

并且尝试使用绝对路径编辑您的代码(这只是一个示例,您的系统会有所不同)。

process = subprocess.Popen(['/usr/local/mailx', .......................

根据 mailx 需要的其他环境设置以及它的 unix 权限,您可能需要编辑您的 crontab 设置。

还要注意 crontab 以哪个用户身份运行您的进程。这是您的期望吗?

【讨论】:

  • 感谢它现在有效。在它之前我尝试过,但它没有工作。我还必须在 .profile 中进行一些修复。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-15
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多