syslog 経由で atd メッセージをログに記録する

syslog 経由で atd メッセージをログに記録する

CentOS 5.3 を実行しており、「at」デーモンからのすべてのメッセージをログに記録したいと考えています。syslog.conf には次のエントリが含まれています。

cron.* /var/log/cron

syslog の cron 行は、「cron、anacron、at、batch」のファミリー全体を指すものと想定しました。ただし、cron および anacron アクションはログに記録されるようですが、「at」アクションはログに記録されません。atd アクションをログに記録するにはどうすればよいでしょうか。

ご清聴ありがとうございました

(追加) エラーが発生した場合に備えて、syslog.conf の内容を追加したいと思います。

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                         /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none        /var/log/messages

# The authpriv file has restricted access.
authpriv.*                      /var/log/secure

# Log all the mail messages in one place.
mail.*                          -/var/log/maillog


# Log cron stuff
cron.*                          /var/log/cron

# Everybody gets emergency messages
*.emerg                         *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                      /var/log/spooler

# Save boot messages also to boot.log
local7.*                        /var/log/boot.log

答え1

「at」プログラムのソースを見ると(CentOS 5.3 ソースリポジトリから) 、確かに syslog にログを記録しているように見えますが、 at デーモン自体に関する致命的なエラーのみがログに記録されます (たとえば、 2 つの at デーモンを同時に実行しようとした場合など)。

ただし、プロセスの実行、結果の戻りコード、標準エラー/出力は syslog にまったく記録されません。デバッグをオンにした場合でも (再コンパイルが必要)、ログ メッセージは (エンド ユーザーにとって) あまり有益ではなく、次のような内容が出力されます。

atd[24116]: pid 24121 exited with status 0.

これは、どのコマンドがどのユーザーによって実行されたか、またはその標準出力/エラーが何であったかを特定するのにはあまり役立ちません。

するコマンドが失敗した場合、または標準出力/エラーに何かが生成された場合に、コマンドを要求したユーザーに電子メール通知を送信します。ただし、出力なしで成功したコマンドの場合、メールは送信されません。これは、-m フラグを使用して変更できます。

から(1)で:

-m 出力がなかったとしてもジョブが完了したらユーザーにメールを送信します。

答え2

このような場合には、syslog にログを記録するコマンドのラッパーを使用します。例:

#!/bin/bash
logger -i -t mycmd Starting
/bin/somecommand
logger -i -t mycmd Completed
exit 0

次に、cron、at などから、代わりにラッパー スクリプトを呼び出します。

これは解決策というよりは回避策であることは承知していますが、目的は達成できます。

答え3

/var/log/secure(RHEL)

atd は PAM 経由でログを記録します。syslog.conf をチェックして、pam がどこにログを記録しているかを確認してください。

答え4

によるとatd(8)すでに syslog にログが記録されているので、問題のある syslog ルールがないことを確認するだけです。

まずここにファイルを投稿してくださいsyslog.conf

また、atd特定のログ機能を指定する限りは構成できませんが、これは問題にはならないはずです。syslog 構成が正しいことを確認するだけで済みます。

関連情報