Crontab не может вызвать mailx, используемый через подпроцесс python - PullRequest
1 голос
/ 14 июля 2020

У меня есть файл 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')

Когда я запускаю этот python файл напрямую с помощью команды unix:

python3 mail_it.py

Он отправляет почту. Но когда я установил этот файл для запуска через crontab. Я получаю следующую ошибку:

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

Заранее спасибо!

1 Ответ

1 голос
/ 14 июля 2020

это проблема со средой ваших процессов, точнее с $ PATH.

Если вы запустите его из своей оболочки, он будет в вашей $ PATH.

узнайте, где ваша программа mailx имеет

which mailx

, и попробуйте отредактировать свой код с помощью абсолютного пути, например (это просто пример, ваша система будет отличаться).

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

в зависимости от того, какой другой настройка среды, которая требуется mailx, и это unix разрешения, тогда вам, возможно, придется отредактировать настройки crontab.

Также обратите внимание, от имени какого пользователя crontab запускает ваш процесс. Это то, чего вы ожидаете?

...