cron
MAILTO
レポートを受け取る電子メールアドレスを明示的に構成する設定があります。
at
似たようなものがありますか?
マニュアルページには send を使用すると述べていますが、/usr/sbin/sendmail
どの宛先アドレスが使用されますか?
そのコンピュータにはeximのみがインストールされており、@に送信された電子メールは失われます(.forward
受信トレイには何も表示されません)。
ベストアンサー1
at
Thomas 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
ジョブを作成するときにプログラムによって決定されます。ユーザー名を決定するロジックは次のとおりです。
- 呼ぶ
getlogin()
- NULL呼び出しの場合
getenv("LOGNAME")
- 電話をかけて名前が存在することを確認してください。
getpwnam()
- NULL呼び出しの場合
getpwuid(real_uid)
- 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に正しくログインしていることを確認するか、試してみると、そのような場合がわかります。tmux
utmp
LOGNAME
at
getlogin()
tty
w
perl -E 'say getlogin()||"not-in-utmp";'
(明確に言えば、LOGNAMEはローカルユーザー名のみになります。電子メールを別の場所に送信するにはaliases
//.forward
などを使用する必要がありますprocmail
。)