web-dev-qa-db-ja.com

ルートのcrontabの特定の1つのジョブのみのCrontab変更MAILTO

ルートのcrontab内の特定のcrontabジョブのメールの送信先を変更するには、次のようにできますか(Do Somethingジョブではrootに送信せず、porkloverに送信するだけです)。

# Make a hambone appear
* * * * * /scripts/hambone.pl

# Eat Ham
* * * * * /scripts/manga_ham.py

OLDMAILTO=$MAILTO

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=$OLDMAILTO
8
Gregg Leventhal

従来のcron実装では、この方法でそれを行うことはできません。 crontabの変数定義はグローバルであり、cronはすべてのコマンドに同じ電子メールアドレスを使用します。

1つの回避策は、ローカルアドレスを使用し、入力に基づいてリダイレクトすることです。

ジョブの出力を別のアドレスに送信する別の方法は、手動で送信することです。さまざまな方法については、 1つのプロセスから別のプロセスに出力をパイプ処理して、最初のプロセスに出力がある場合にのみ実行する方法 を参照してください。


いくつかの最近のcron実装、少なくともsystemdのcrontabは、異なる方法でcrontabを解析します(thanks geedoubleyajarauh ):ジョブラインより上の割り当てのみがそのジョブに適用されます。したがって、最新のLinuxシステムを使用している場合は、それを実行できる可能性があります。システムのドキュメントを確認してください(man 5 crontab)。

Cronは変数の割り当ての右側を展開しないため、質問で提案したことはまだ実行できません。 MAILTO=$OLDMAILTOは、MAILTOをドル記号で始まる値に設定します。古いアドレスを繰り返す必要があります。

# Make a hambone appear. Email sent to the user running the crontab.
* * * * * /scripts/hambone.pl

[email protected]
#Do something. Email sent to [email protected]
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=
# Hunt rabbits. Doesn't send email.
* * * * * /scripts/hunt.pl --rabbits

MAILTO=bob
# Eat Ham. Email sent to bob on the local machine.
* * * * * /scripts/manga_ham.py

また、MAILTO=porklover.cramble.eduはアカウントにメールを送信しますporklover.cramble.eduローカルマシン上。それはおそらくあなたが望むものではありません。

このような変数をcronエントリで設定することはできませんが、crontabで実行できるのは、単一のエントリのMAILTO変数を上書きして、後続のエントリで設定し直すことです。

例:

# Eat Ham
* * * * * /scripts/manga_ham.py

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=root

これの欠点として、デフォルトのMAILTO設定が変更された場合(/etc/crontab例)このcronエントリでも変更する必要があります。

1
geedoubleya