プロセスを中断したユーザーを探す

プロセスを中断したユーザーを探す

を実行すると、service mongod start特定のプロセスが実行され、ほぼ直ちにクラッシュし、サービスが失敗します。プロセスが正しいユーザーとして実行されないため、問題が発生したと考えられます。

残念ながら、サービスログはまったく役に立ちません。

だから、どのユーザーの下でプロセスが作成されるのか知りたいです。

ps auxプロセスが急速にクラッシュするため、機能しません。

ユーザー名など、ファイルに競合が発生したいすべてのプロセスを何らかの方法で記録できますか?

Dockerコンテナ内でDebian Wheezyを使用しています。

答え1

1つのアプローチは、独自のラッピングがstrace必要な起動プロセスをラップするか、適切なラッパーを呼び出すように変更してから順番に開始することです。利点:カーネルモジュールは不要です。欠点:作業が遅くなったり、サービスファイルを退屈に編集したり(元に戻すことを忘れないでください)、不明な方法で問題を妨げる可能性があります。systemdmongod.servicestracemongodmongod

#!/bin/sh
exec strace -ff -o /root/lookatthese -e trace=process /mongodb/startup/command/here

別の方法は、カーネルモジュールが必要ですが、ステップ間の一般的な補間なしで進行中の作業をより効率的に記録できるsysdigorを使用することです。SystemTapstrace

# sysdig 'evt.type = execve'
...

execve次のようなものを使用するユーザーを含む一般的な起動コマンドを実行すると、すべての呼び出しが表示されます。

# sysdig -p \
  '%evt.time %proc.name[%proc.pid] uid=%user.uid ppid=%proc.ppid %proc.exeline' \
  'evt.type = execve'

あるいは、より多くのデータをキャプチャし(システム使用量に応じて)、出力ファイルを詳細に分析することもできます。

関連情報