Saya telah membiarkan skrip berjalan di mesin jarak jauh sejak saya mengerjakannya secara lokal. Saya dapat terhubung melalui SSH ke mesin sebagai pengguna yang sama dan melihat skrip berjalan di ps
.
$ ps aux | grep ipcheck
myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh
Itu hanya mengeluarkan ke stdout pada sesi lokal (saya menjalankan ./ipchecker.sh
membentuk jendela terminal lokal, tidak ada pengalihan, tidak menggunakan screen
dll).
Apakah dari sesi SSH saya dapat melihat output dari perintah yang sedang berjalan ini (tanpa menghentikannya)?
Sejauh ini yang terbaik yang saya temukan adalah menggunakan strace -p 18386
tapi saya mendapatkan gerombolan teks terbang ke atas layar, itu terlalu detail. Saya bisa menghentikan strace
dan kemudian menyaring output dan menemukan teks yang dicetak ke stdout tetapi sangat panjang dan membingungkan, dan jelas saat dihentikan saya mungkin melewatkan sesuatu. Saya ingin menemukan cara untuk melihat keluaran skrip secara langsung seolah-olah saya sedang bekerja secara lokal.
Adakah yang bisa memperbaiki ini? Jawaban yang jelas adalah memulai ulang skrip dengan pengalihan atau di screen
session dll, ini bukan skrip misi kritis jadi saya bisa melakukannya. Namun, saya melihat ini sebagai latihan belajar yang menyenangkan.
Jawaban yang Diterima:
Jika Anda hanya ingin memata-matai proses yang ada, Anda dapat menggunakan strace -p1234 -s9999 -e write
di mana 1234 adalah ID proses. (-s9999
menghindari string terpotong menjadi 32 karakter, dan write
panggilan sistem yang menghasilkan keluaran.) Jika Anda hanya ingin melihat data yang ditulis pada deskriptor file tertentu, Anda dapat menggunakan sesuatu seperti strace -p1234 -e trace= -e write=3
untuk melihat hanya data yang ditulis ke deskriptor file 3 (-e trace=
mencegah panggilan sistem dicatat). Itu tidak akan memberi Anda hasil yang sudah diproduksi.
Jika output bergulir terlalu cepat, Anda dapat menyalurkannya ke pager seperti less
, atau kirimkan ke file dengan strace -o trace.log …
.
Dengan banyak program, Anda dapat mengalihkan output berikutnya dengan peretasan ptrace, baik ke terminal Anda saat ini atau ke sesi layar baru. Lihat Bagaimana saya bisa menyangkal proses yang sedang berjalan dan mengaitkannya ke shell layar baru? dan utas terkait lainnya.
Perhatikan bahwa tergantung pada bagaimana sistem Anda diatur, Anda mungkin perlu menjalankan semua strace
ini perintah sebagai root bahkan jika proses berjalan di bawah pengguna Anda tanpa hak ekstra. (Jika proses berjalan sebagai pengguna yang berbeda atau setuid atau setgid, Anda harus menjalankan strace
sebagai root.) Sebagian besar distribusi hanya mengizinkan proses untuk melacak turunannya (ini memberikan manfaat keamanan moderat — ini mencegah beberapa injeksi malware langsung, tetapi tidak mencegah injeksi tidak langsung dengan memodifikasi file). Ini dikendalikan oleh kernel.yama.ptrace_scome
sysctl.