Một biến thể của câu trả lời của @ l0b0:
dmesg --follow | awk '
/BUG: workqueue lockup/ { system ("killall someprocessname") ; rem="done at each occurrence. You could add further things, like print to a logfile, etc.,"
}'
Điều này hãy để awk thực hiện vòng lặp, có một số lợi thế:
- nó sẽ hoạt động cho đến khi quá trình đó chết.
- Nó cũng không gọi nhiều hơn 1
killall
lần xuất hiện của chuỗi tìm kiếm "BUG: khóa máy", điều này cải thiện câu trả lời khác.
Để kiểm tra: Bạn có thể đặt đoạn mã này vào tập lệnh có tên thescript
và thực hiện nohup thescript &
, để nó thescript
tiếp tục chạy ngay cả sau khi bạn thoát phiên.
Một khi bạn hài lòng, nó hoạt động, giết nó, và sau đó bạn có thể (thay vì chạy nó mỗi lần trong một cái vỏ nohup
), biến nó thành một daemon script
cái mà bạn có thể đã bắt đầu trong runlevel hiện tại của mình.
tức là: sử dụng tập lệnh khác làm mô hình (bạn cần có ít nhất các phần bắt đầu, dừng và trạng thái), bạn có thể sửa đổi thescript
một cách thích hợp và sau đó đặt nó vào trong /etc/rc.d/init.d
và có một liên kết tượng trưng đến nó được đặt tên Sxxthescript
theo (các) thích hợp /etc/rc.d/rcN
, N
là một số cho runlevel bình thường của bạn (xem các dòng trên cùng who -a
để biết mức độ chạy hiện tại). Và cũng có các Kxxthescript
liên kết thích hợp , trong mọi (hoặc gần như mọi) runlevels, để script được giết một cách thích hợp khi chuyển runlevels.
Hoặc thực hiện "những điều thích hợp" để chạy / dừng thông qua systemd hoặc bất kỳ hệ thống tương đương nào mà bản phân phối của bạn sử dụng.