Redirect strace ke file

9

Saya mencoba untuk melacak apache2. Ini adalah perintah yang saya coba jalankan.

ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace >> trace.txt

Saya mencoba

(ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace ) >> trace.txt

atau

ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace | xargs >> trace.txt
Marin
sumber

Jawaban:

11

Ada alasan khusus mengapa Anda tidak dapat menggunakan flag -o?

ps auxw | grep sbin/apache | awk '{print " -p " $2}' | xargs strace -o /tmp/trace.txt

Juga, Anda harus menggunakan beberapa trik regex untuk tidak menangkap proses grep Anda dalam daftar proses.

ps auxw | grep 'sbin/[a]pache' ....

Juga ingat bahwa dalam kasus spesifik apache,

  1. Apache adalah (biasanya) multiproses, apakah Anda ingin mendapatkan orang tua atau salah satu dari anak-anak? Saya akan menambahkan flag '-f' ke strace, yang (antara lain) memasukkan PID dalam output.
  2. Anda bisa mendapatkan ID proses dari proses induk utama dari file PID.

    mis. strace -o /tmp//trace.txt -f $ (</path/to/apache.pid)

Jadi, itu pertanyaan yang Anda tanyakan .. tetapi apa yang Anda coba lakukan? Debug saat startup? strace proses anak melayani permintaan? Lihat juga flag -X untuk apache.

Homolka yang kaya
sumber
Hai Rich terima kasih atas jawaban Anda. Yang saya coba lakukan adalah melihat apakah ada masalah dalam penggunaan CPU. Namun opsi '-c' tidak terlalu berguna untuk beberapa alasan. Saya juga memeriksa trace.txt untuk timestamp untuk setiap kenaikan aneh dan saya tidak melihat.
Marin
1
 ps auxw | grep sbin/apache | awk '{print"-p " $2}' | xargs strace 2>> trace.txt
Marin
sumber
1

Secara umum, strace "dapat dialihkan ke file" tetapi ia menulis outputnya ke stderr (mencampurnya dengan stderr program), jadi itu akan seperti

strace progname 2>my_strace_output

Jika Anda ingin "semua keluaran" masuk ke file:

strace progname 1>my_strace_output 2>&1

jika Anda ingin dapat "menangkap" itu:

strace progname 2>&1 | grep ...

Namun perlu diperhatikan jika Anda menerima dan mengirimnya ke file, banyak buffering terjadi: https://unix.stackexchange.com/questions/338330/grepping-strace-output-gets-hard

rogerdpack
sumber
0

Anda juga dapat mengarahkan keluar standar ke file dengan cara ini:

(time /bin/ls) &> /tmp/time.txt

atau untuk debugging skrip php:

(strace php /path/to/www/script.php) &> strace_output.txt
seorang programmer
sumber