Câu trả lời:
Tôi đề nghị hãy xem bash
biến SECONDS
:
GIÂY : Mỗi lần tham số này được tham chiếu, số giây kể từ khi gọi shell được trả về. Nếu một giá trị được gán cho SECONDS, giá trị được trả về cho các tham chiếu tiếp theo là số giây kể từ khi gán cộng với giá trị được gán.
Do đó, bạn có thể chỉ cần in biến này ở cuối tập lệnh. Ngoài ra, nếu ý định của bạn là đo thời gian chỉ là một phần của chương trình, thì chỉ cần đặt SECONDS=0
ở đầu khối lệnh được đo và cuối cùng chỉ sử dụng giá trị được lưu trữ trong biến này.
SECONDS=0
trên một tập lệnh và điều tương tự trên một tập lệnh khác, liệu chúng có can thiệp lẫn nhau không?
START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))
. Điều này có vẻ linh hoạt hơn một chút để sử dụng đồng thời.
Tiền tố lệnh của bạn với /usr/bin/time
và lệnh thời gian sẽ xuất ra thời gian để tập lệnh chạy. Điều này là di động hơn so với việc sử dụng một cái gì đó bash
cụ thể.
Trong khi sử dụng SECONDS
và time
sẽ cung cấp cho bạn các giá trị tương đối. Nếu bạn muốn có các giá trị tuyệt đối cho Mục đích kiểm toán và báo cáo khi kịch bản chạy và khi hoàn thành, bạn có thể muốn thử một cái gì đó như thế này trước và sau các lệnh của bạn
date '+%Y%m%d%H%M%S.%N'
. Điều này cũng có thể cung cấp cho bạn mức độ chi tiết tốt hơn vì nó có thể nắm bắt sự khác biệt của giây phụ khi bạn có các lệnh như ping
thường thực hiện trong vòng một giây.
Nest kịch bản của bạn. Để gửi email có một số tùy chọn. Cá nhân tôi ủng hộ msmtp cho việc này, bạn có thể tự xác định tiêu đề theo kiểu "ở đây" (nội tuyến) hoặc sử dụng một tệp riêng và ghép chúng lại với nhau. Có tất cả các loại thay thế cho điều này liên quan đến perl, python, vv
Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: somebody@somewhere.else
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"
Các dòng trống là quan trọng. gửi tin nhắn được lắp ráp của bạn vào msmtp như vậy:
cat assembled.eml | msmtp somebody@somewhere.else
Một người bi quan sẽ lặp đi lặp lại cho đến khi thành công một số lần hợp lý.
Tải trọng cũng có thể là html và có thể là php được tạo.
Một thay thế rất xấu cho hoạt động "hàng loạt" qua đêm là tạo ra một cronjob và đầu ra được gửi qua email thay cho stdout / stderr.
$SECONDS
; thật tuyệt! Để thêm vào điều này, bạn có thể chuyển đổi giây thành giờ: phút: giây với nội dung tương tựdate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'
(xemman date
để biết thêm tùy chọn định dạng).