at コマンドで使用されるメールアドレスをオーバーライドする方法

at コマンドで使用されるメールアドレスをオーバーライドする方法

cronMAILTOレポートを受け取る電子メールアドレスを明示的に構成する設定があります。

at似たようなものがありますか?

マニュアルページには send を使用すると述べていますが、/usr/sbin/sendmailどの宛先アドレスが使用されますか?

そのコンピュータにはeximのみがインストールされており、@に送信された電子メールは失われます(.forward受信トレイには何も表示されません)。

ベストアンサー1

atThomas Koenigの(現在)を使用しているとします。Jose Kalarisが管理)は可能ですが、明示的に文書化されていない内容は次のものに由来しますat(1)

/var/run/utmp ファイルが使用できないか破損している場合、または at 呼び出し時にユーザーがログインしていない場合、環境変数 LOGNAME にあるユーザー ID にメールが送信されます。未定義または空の場合、現在のユーザーIDが想定されます。

どのように機能するかは、最初の3行が次のat作業ファイルを作成することです。atd

#!/bin/sh
# atrun uid=100 gid=100
# mail youruser 1

ここでuid=100、およびgid=100は、youruserジョブを作成するときにプログラムによって決定されます。ユーザー名を決定するロジックは次のとおりです。

  1. 呼ぶgetlogin()
  2. NULL呼び出しの場合getenv("LOGNAME")
  3. 電話をかけて名前が存在することを確認してください。getpwnam()
  4. NULL呼び出しの場合getpwuid(real_uid)
  5. NULLの場合、すべてのおもちゃをベビーカーから捨てます。

それでは、getlogin()LOGNAME変数を使用するためにNULLを返すようにどのように説得できますか? 1つの方法はstdinをソートすることです。いいえこれはターミナルです(これがglibcがgetlogin()他のシステムで異なる動作をしていると考える理由です)。

これを行うには、次のようにしますbash

LOGNAME=backup at 19:52 -m <<< uptime
echo uptime | LOGNAME=backup at 19:52 -m 

要点は、リダイレクトを使用して標準入力で実行されるコマンドを表示することですat。 (atまた実行もう一度開くそのオプションを使用している場合は、stdinのオプションを使用できますが、-fここで使用するには遅すぎます。 )コマンドをファイルに保存するか、bashを使用してファイルを作成できます。

LOGNAME=backup at 19:52 -m -f <( echo uptime ) 0<&-

0<&-標準入力< /dev/nullもオフにしてください)

端末でこれを無視するscreenと(設定、権限、またはヘルパーの問題によって)失敗するため、設定して正常に使用することもできます。ターミナルファインダーを使用して適切なttyに正しくログインしていることを確認するか、試してみると、そのような場合がわかります。tmuxutmpLOGNAMEatgetlogin()ttywperl -E 'say getlogin()||"not-in-utmp";'

(明確に言えば、LOGNAMEはローカルユーザー名のみになります。電子メールを別の場所に送信するにはaliases//.forwardなどを使用する必要がありますprocmail。)

おすすめ記事