ลองใช้ bash script และขยายคำสั่งของคุณ ฉันใช้dateutils
เพื่อเพิ่มระยะเวลา
ดังนั้นการใช้สคริปต์นี้ความต้องการแพคเกจผ่านใช้ได้dateutils
apt
( sudo apt install dateutils
)
สคริปต์นี้จะพิจารณาถึงสถานะการออนไลน์ปัจจุบัน (เซสชันปัจจุบัน) ด้วยดังนั้นจึงแม่นยำยิ่งขึ้น วินาทีจะไม่ถูกนับ รายงานหน่วยต่ำสุดคือนาที
#!/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"
- ครั้งแรกที่ uptimes จากการรีบูตครั้งล่าสุดมีการระบุไว้และจัดรูปแบบเพื่อแยกข้อมูลวันชั่วโมงนาทีและข้อมูลที่สอง
temp
นี้จะถูกบันทึกไว้แล้วใน
- มีการตั้งค่าวันที่อ้างอิงปลอมที่เรียกว่า org =
2015-01-01
ซึ่งจะเพิ่มสถานะการออนไลน์ปัจจุบัน
- จากนั้น uptimes สะสมทั้งหมดจะถูกเพิ่มเข้าไปในตัวแปร
new
- ระยะเวลาระหว่าง
org
และ uptime เน็ตnew
พบความแตกต่าง
เอาท์พุท:
vayu@helix:$ ./uptime_record.sh
Total run time (days:hours:minutes)
57d 20h 36m
สคริปต์ต่อไปนี้สำหรับ uptime ในตรงหนึ่งปีนับจากวันสคริปต์ที่มีการเรียกใช้
#!/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"