Theo dõi tiến trình với xargs


11

Tôi đang sử dụng xargs để thực thi một lệnh trên một tập hợp các tham số đầu vào như thế này:

cat <someinput> | xargs -n 1 -P 5 <somecmd>

Các tập tin đầu vào thực sự dài và mất nhiều thời gian để chạy. Vì vậy, tôi chỉ chờ đợi dấu nhắc lệnh xuất hiện. Có cách nào để hiển thị thanh tiến trình cho số lượng đối số đầu vào đã hoàn thành không?

Tôi đã thử sử dụng 'thanh' nhưng tôi luôn có thông lượng 'vô hạn'. Có vẻ như xargs đọc toàn bộ đầu vào trước khi thực hiện các lệnh.

http://i.stack.imgur.com/5Wsgx.gif

Câu trả lời:


13

Nếu bạn có GNU Parallel, bạn có thể chạy:

cat <someinput> | parallel --bar -P 5 <somecmd>

GNU Parallel là một bộ song song chung và giúp dễ dàng chạy các công việc song song trên cùng một máy hoặc trên nhiều máy bạn có quyền truy cập ssh.

Nếu bạn có 32 công việc khác nhau mà bạn muốn chạy trên 4 CPU, một cách đơn giản để song song là chạy 8 công việc trên mỗi CPU:

Lập kế hoạch đơn giản

GNU Parallel thay vào đó tạo ra một quy trình mới khi kết thúc - giữ cho CPU hoạt động và do đó tiết kiệm thời gian:

Lập kế hoạch song song GNU

Cài đặt

Một cài đặt cá nhân không yêu cầu quyền truy cập root. Nó có thể được thực hiện trong 10 giây bằng cách làm điều này:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Để biết các tùy chọn cài đặt khác, hãy xem http://git.savannah.gnu.org/cgit/abul.git/tree/README

Tìm hiểu thêm

Xem thêm ví dụ: http://www.gnu.org/software/abul/man.html

Xem video giới thiệu: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Xem qua hướng dẫn: http://www.gnu.org/software/abul/abul_tutorial.html

Đăng ký danh sách email để nhận được hỗ trợ: https://lists.gnu.org/mailman/listinfo/abul


1
cảm ơn bạn rất nhiều (vì câu trả lời và đã viết phần mềm!), nó hoạt động rất tốt!
Greg Sadetsky

9

Bạn có thể sử dụng pv:

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

Với điều này, bạn sẽ biết được nơi việc đọc someimput là, vì vậy bạn sẽ biết khoảng nơi điều trị someimput là.


1
Một trường hợp sử dụng thường xuyên khác có thể là sự kết hợp với find:FIND=( find "$DIR" -type f ) && ${FIND[@]} -print0 | pv -0lps $(${FIND[@]} | wc -l) | xargs -0 -I {} -P 5 <somecmd>
mxmlnkn

3

Nếu bạn đang tìm kiếm một chỉ dẫn chung về tiến trình, phương pháp đơn giản nhất là chỉ lặp lại trước khi thực hiện lệnh bạn muốn làm.

Thí dụ: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{}thiết lập {}chuỗi hiện tại đang được xử lý

sh -csẽ cho phép bạn thực thi nhiều lệnh (lưu ý: dấu chấm phẩy sau mỗi lệnh được yêu cầu bao gồm cả lệnh cuối cùng .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.