
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 構成が正しいことを確認するだけで済みます。