Cố gắng với bash script và mở rộng lệnh của bạn. Tôi sử dụng dateutils
để thêm thời gian.
Do đó để sử dụng tập lệnh này, người ta cần dateutils
gói có sẵn thông qua apt
. ( sudo apt install dateutils
)
Kịch bản này cũng tính đến thời gian hoạt động hiện tại (phiên hiện tại), do đó chính xác hơn. Giây không được tính. Đơn vị thấp nhất báo cáo là phút.
#!/bin/bash
# Total uptime reported.
temp=$(last reboot --since 2016-01-01 --until 2016-12-31 | grep -o '(.*)' | grep -v '-' | sed 's/(\([0-9]\{1,\}\)+\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1d\2h\3m/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1h\2m/g' )
curr=$( cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60)' )
echo "Total run time (days:hours:minutes)"
curr="2015-01-01T"$curr
org="2015-01-01T00:00:00"
new=$(dateutils.dadd $curr $temp )
dateutils.ddiff $org $new -f "%dd %Hh %Mm"
- Đầu tiên, các mức tăng từ lần khởi động lại cuối cùng được liệt kê và định dạng để trích xuất thông tin ngày, giờ, phút và thông tin thứ hai. Điều này sau đó được lưu vào
temp
.
- Ngày giả mạo tham chiếu được đặt tên là org =
2015-01-01
mà thời gian hoạt động hiện tại được thêm vào.
- Sau đó, tất cả các mức tăng tích lũy được thêm vào biến
new
- Thời lượng giữa
org
và thời gian hoạt động ròng new
được tìm thấy bởi sự khác biệt.
Đầu ra:
vayu@helix:$ ./uptime_record.sh
Total run time (days:hours:minutes)
57d 20h 36m
Kịch bản sau đây dành cho thời gian hoạt động trong đúng một năm kể từ ngày tập lệnh được chạy .
#!/bin/bash
# Total uptime reported since exactly 1 year (from the time script is run).
now="$(date +'%Y-%m-%d')" ;
last_y=$(dateutils.dadd $now -1y)
temp=$(last reboot --since "$last_y" --until "$now" | grep -o '(.*)' | grep -v '-' | sed 's/(\([0-9]\{1,\}\)+\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1d\2h\3m/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1h\2m/g' )
curr=$( cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60)' )
echo "Total run time in one year (days:hours:minutes)"
curr="1980-01-01T"$curr
org="1980-01-01T00:00:00"
new=$(dateutils.dadd $curr $temp )
dateutils.ddiff $org $new -f "%dd %Hh %Mm"