1. ホーム
  2. python-3.x

[解決済み] CrontabでpythonのsubPrrocess経由で使用するmailxを呼び出せない。

2022-02-24 20:05:44

質問

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('[email protected]', 'subject', 'file_name', 'body')

このPythonファイルをunixコマンドで直接実行した場合。

python3 mail_it.py

メールが送信されます。しかし、このファイルをcrontabで実行するように設定すると。以下のようなエラーが発生します。

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

ありがとうございました。

どのように解決するのですか?

これは、あなたのプロセス環境、より具体的には$PATHの問題です。

シェルから実行する場合は、$PATHにあります。

mailx プログラムがどこにあるか調べるには

which mailx

という絶対パスでコードを編集してみてください(これは単なる例であり、あなたのシステムは異なるでしょう)。

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

mailxが必要とする他の環境設定とunixのパーミッションによっては、crontabの設定を変更しなければならないかもしれません。

また、クーロンタブがどのユーザーとしてプロセスを実行しているかに注意してください。それはあなたが期待するものですか?