Câu trả lời:
Mục đích của watch
là hiển thị kết quả của toàn màn hình lệnh và cập nhật liên tục; nếu bạn đang chuyển hướng đầu ra thành một tệp và làm nền thì thực sự không có lý do gì để sử dụng đồng hồ ở nơi đầu tiên.
Nếu bạn muốn chạy lệnh nhiều lần với độ trễ ( watch
chờ hai giây theo mặc định), bạn có thể sử dụng một cái gì đó như thế này:
while true; do
cmd >> output.txt
sleep 2
done
Đây là một cách:
watch -n 1 'date' &>/dev/null &
Vì bạn làm nền cho quá trình, chúng tôi có thể cho rằng bạn không cần màn hình hiển thị đầu cuối và bạn sẽ chuyển hướng tốt đến một tệp. Nếu bạn làm điều đó bạn sẽ có thể nền watch
mà không có vấn đề.
sleep
, như đề xuất của Michael Mrozek, sẽ dần dần tụt hậu có thể là điều không mong muốn. Ngoài một tập lệnh shell phức tạp theo dõi thời gian hệ thống và thực thi một lệnh dựa trên thời gian đã trôi qua, watch -p
có thể là một lựa chọn tốt cho thời gian chính xác.
Đối với thời gian chính xác:
watch -n 1 -p 'date' &>/dev/null &
&
hai lần?
man bash
để xem cách đầu tiên &
hoạt động. ;)
Tôi không chắc chắn về động lực của bạn, nhưng có lẽ điều này là đủ?
while true; do sleep 2; cmd >>output.txt; done &
Nếu không, hãy giải thích lý do tại sao bạn thực sự cần watch
.
Phụ thuộc vào động lực của bạn:
Bạn muốn chạy một cái gì đó theo định kỳ. Sau đó, bạn có thể sử dụng cron trực tiếp. (Nếu độ chi tiết của thời gian là 1 phút là đủ cho mục đích của bạn).
Bạn muốn chạy một cái gì đó liên tục:
while sleep 2 ; do
cmd
done >& log.txt
(Bạn có thể chạy cái này từ crontab chẳng hạn, mặc dù sử dụng tập lệnh rất được khuyến khích).
Bạn muốn chạy định kỳ một lệnh và có quyền truy cập vào đầu ra của lần thực hiện cuối cùng.
Bạn có thể viết đầu ra cho một ramfs (sửa đổi tập lệnh trước):
while sleep 2 ; do
cmd >& last_execution.log
done
hoặc thậm chí tốt hơn:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
Bạn có thể kết hợp screen
và watch
, để bạn luôn có thể kiểm tra trạng thái mới nhất, miễn là nó phù hợp với một màn hình:
screen watch -n 3660 ./make-backup.sh
Bạn có thể sử dụng lệnh màn hình.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html