
at
特定のジョブのメール通知を無効にしたい。例えば、以下のユースケース(ジョブの途中で強制終了)をテストする場合、しない出力が欲しいのですが、本番環境では同じコードで、メールで送信された出力が欲しいです:
$ at now <<<'/usr/bin/timeout 15s nc -l 20242'
job 71 at 2016-05-16 15:03
$ pidof /usr/bin/timeout
11853
$ kill 11853
$ mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/bishop": 1 message 1 new
>N 1 bishop@trencher Mon May 16 15:03 16/920 "Output from your job 71"
& 1
Message 1:
From bishop@trencher Mon May 16 15:03:30 2016
Date: Mon, 16 May 2016 15:03:30 -0400
From: bishop@trencher
Subject: Output from your job 71
To: bishop@trencher
Status: R
/bin/bash: line 1: 11853 Terminated /usr/bin/timeout 15s nc -l 20242
を設定できることはわかっていますMAILPATH=/dev/null
が、よりきめ細かな制御ができる方がよいと思います。 と を設定してMAIL
もMAILTO
明らかな効果はありません。ジョブを編集してディレクティブを削除できると思いました# mail
が、うまくいかないようです。
at 15:15 <<<'date'
at -c 73 | grep -v '^# mail bishop' | at 15:15
atrm 73
徹底的に検索してみましたが、at という名前のコマンドを探すのは簡単ではありません。at のソース コードさえ見つからないようです。GNU coreutils に載っているのではないですか?
アップデート: ステーション識別:
$ uname -a
Linux trencher 4.4.8-20.46.amzn1.x86_64 #1 SMP Wed Apr 27 19:28:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ at -V
at version 3.1.10
ジョブごとに、出力(任意の出力)を送信元ユーザーにメールで送信するかどうかを制御することは可能ですか?
答え1
RedHat (および Centos とその仲間)at
と Debian 派生のビンテージ ( rpm -qi at
RedHat では Debian URL を示し、上記のコメントでは derobert も示しています) は、次の-M
オプションをサポートする必要があります。
-M Never send mail to the user.
これがない場合、別のオプションとしてジョブからの出力を抑制することができます。
#!/bin/bash
exec >/dev/null 2>&1
... the usual job commands here ...
logger
または、出力を検査する必要がある場合は、代わりに出力を または ログ ファイルにパイプします。
さらに別のオプションとしては、メール転送エージェントを変更し、特に開発システムの場合は、すべてのメールを/dev/null
開発サーバー上のどこかのメールボックス ファイルにドロップする方法がありますが、これにはさらに作業が必要です。
答え2
渡されるコマンドの前にat
(パッケージchronic
からmoreutils
)を付けると、両方コマンドがエラー状態で終了した場合は stderr と stdout に出力され、それ以外の場合は何も出力されません。
ついでに、cron ジョブにも同じことを行います。