
私のサーバーには、毎晩深夜に強制終了される実行中のプロセスがあります。これは職場で発生しており、発生時には私はその場にいませんし、リモート アクセスもできません。
殺害は毎晩 23:59 に確実に発生します。次の日に到着すると、次のようになります。
- プロセスは23:59までです
- プロセスのログには、最終変更時刻が 23:59 と表示されます (新しい日付のログは直後に開始されます)。
殺害は同じ時間に起きるので、バッチジョブを強く疑いました。crontab
すべてのマシンの を調べましたが、何も見つかりませんでした。明らかに何かが足りないようです。
出力をps
断続的に報告し、数分前に起動してat
しばらくループする監視スクリプトを作成したいと考えています。このアイデアは弱く、エラーが発生しやすいように思われるので、もっと良いアイデアを持っている人はいないかと思っています。
詳細:
宇宙は非常に大きく、非常に古いレガシー システムです。私のチームでは誰もそのようなプロセスを認識していないようです (もし認識している人がいたら、その人は私たちのチームにいます)。大規模な組織は何千人もの従業員で構成されており、理論的にはその多くがこれにアクセスできるはずです (なぜアクセスできるのかわかりません)。言い換えると、セキュリティはそれほど厳重ではありません。
環境は、Solaris 10 を実行する複数のマシンで構成されています。
これは実稼働環境ではないため、タイムアウトやダウンタイムは重要ではありません。
タイミングの正確さを考えると可能性は低いですが、強制終了がバッチ ジョブによるものではない可能性も排除しません。
明らかに、私たちの簿記には欠陥があるので、想像できることはすべて可能です。
私の質問は、採用すべき最善の戦略は何かということです。これは、「レガシー システムで作業する喜び」という大きな傘の下にあります。私はスクリプトの作成を開始しており、フィードバックを得るためにまもなくここに投稿する予定です。それまでの間、もっと良いアイデアをお持ちの方がいらっしゃいましたら、ぜひ教えてください。
答え1
ログを定期的にローテーションするのは一般的であり、深夜にローテーションするのが一般的です。多くのアプリケーションはこれを自動的に実行します。
そうでない場合は、logrotate
ローテーションを実行するようなツールがあります。多くのプログラムは、HUP 信号が送信されたときにログを再度開くように設定されており、これは で使用される手法の 1 つですlogrotate
。
確認事項:
- すべての PID が変更されますか。変更されていない場合は、プログラムが独自のログをローテーションしているか、ログのローテーションに適切に応答している可能性があります。
- PID を変更するプログラムは、深夜に再起動されましたか? そうでない場合は、親プログラムをチェックして、何が行われるかを確認します。
- 一日の終わりにどのプロセスが実行されているかを確認するには、root の crontab をチェックします。
- プロセス ユーザー ID の crontab をチェックして、1 日の終わりにどのプロセスが実行されているかを確認します。
- ログ ファイルが直接書き込まれているのか、それともログをローテーションするログ ライターによって書き込まれているのかを確認します。