
Ubuntu 14.04 を実行しているサーバーがあります。/var/log/auth.log には、1 時間ごとに実行される何らかの自動プロセスがあり、そのプロセスが何であるかを知りたいです。
どのユーザーによっても cron ジョブがスケジュールされていないことは既に判明しています。私が確認する必要があるのは、auth.log の次のサンプル行を 1 時間ごとに確認することだけです。
Dec 2 03:17:01 fi CRON[23537]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 2 03:17:01 fi CRON[23537]: pam_unix(cron:session): session closed for user root
Dec 2 04:17:01 fi CRON[23557]: pam_unix(cron:session): session opened for user root by (uid=0)
これを追跡する方法について何かアイデアはありますか?
答え1
どのユーザーによっても cron ジョブがスケジュールされていないことが既に判明しました。
/etc/crontab
おそらく、およびのシステム全体の cron ジョブを見逃したのでしょう/etc/cron.d/*
。
何もない場合は、strace
cron プロセスにアタッチして、読み取られるファイルや実行されるコマンドを確認できます。
strace -p 23537 -e file
strace -p 23537 -f -e execve [-s 10000]
古いシステムでは、cron が自動リロードのサポートなしでコンパイルされていた可能性があります。そのため、誰かが /etc/crontab からジョブを手動で削除したが cron をリロードしなかった場合、誰かがリロードをトリガーするまでジョブは実行され続けます。
答え2
使用できますatop
。
インストールされると、プロセスとそのリソース使用量が自動的に記録され、データがログ ファイルに書き込まれます。十分なデータが収集されるまで少し待ってから、ログを検査したり解析したりすることができます。
たとえば、ログを収集した後、どのプロセスが実行されていたかを確認するには、次のコマンドをお勧めします。
atop -r /var/log/atop/atop_<current date> -b 03:16 -e 03:18 -P PRG | grep -P 'PRG.*\s23557\s\('
この意志:
- 当日の03:16から03:18までのログファイルを読み取ります。
- プロセスに関する一般的なデータ(プロセス名を含む)を含む、機械が解析可能な出力でデータを出力します。
- PID 23557 のプロセスが記録されている行を検索すると、括弧で囲まれたプロセス名を確認できます。grep パターンは精度を高めるためのもので、行は常に で始まり
PRG
、値の列はスペースで区切られ (PID は別の列)、PID の後の列は括弧で囲まれたプロセス名 ( で始まる(
) になります。