รับวันที่และเวลาของการเริ่มต้นระบบใน Linux


44

ฉันรู้ว่าuptimeพิมพ์เวลาที่เครื่องเริ่มทำงาน แต่มีวิธีที่ง่ายกว่า (เชื่อถือได้) ในการรับวันที่เริ่มต้นมากกว่าการนับถอยหลังจากผลลัพธ์นี้

ฉันพยายามมองไปรอบ ๆ/procแต่ไม่พบสิ่งที่เกี่ยวข้อง นอกจากนี้ยังมีบรรทัดเช่นนี้ในของฉันdmesg:

[    0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)

แต่ฉันสงสัยว่าวิธีนี้คือการกระจายและรุ่นเคอร์เนลไม่เชื่อเรื่องพระเจ้า?


มีอะไรunreliable or hardเกี่ยวกับuptime?
Bobby

2
@ บ๊อบบี้: ไม่มีอะไรเกี่ยวกับคำสั่งหรือฟังก์ชั่นของมันต่อ แต่ฉันบอกว่าฉันต้องการที่จะได้รับวันที่และเวลาของการบูตระบบครั้งสุดท้ายไม่นานแค่ไหนก็ขึ้นมาตั้งแต่ uptimeส่งคืนสตริงเช่น "up 13 วัน, 21:01" และคุณจะต้องนับจากนั้น
jho

4
มันสำคัญมากที่จะนับถอยหลังจากค่าสถานะการออนไลน์ หากคุณต้องการความน่าเชื่อถือ/proc/uptimeที่คุณต้องการ
sam hocevar

คำตอบ:


40

ผมพบว่าคำสั่งบางอย่างที่นี่ ลองหรือwho -b ให้วันที่เป็นตัวเลขในขณะที่ส่งกลับชื่อวัน / เดือนย่อlast reboot | head -1
wholast reboot


ถ้าเราต้องการแค่วันที่และไม่มีอะไรอีกแล้ว
T0xicCode

4
who -b | cut -d' ' -f13คืนวันที่เท่านั้น (-f14 ส่งคืนเวลา)
charlesbridge

2
คำเตือน: last rebootไม่ได้ให้ฉันวันที่ที่ถูกต้อง! who -bเคยทำ.
qwertzguy

last rebootให้ฉันด้วยวันที่ไม่ถูกต้องเช่นกัน wtmp ดูเหมือนจะถูกหมุนในวันแรกของเดือน
golimar

23

สิ่งนี้จะสอบถามเวลาทำงานจากเคอร์เนลและแสดงในเขตเวลาท้องถิ่น:

date -d "`cut -f1 -d. /proc/uptime` seconds ago"

ระมัดระวังตัวเลือกอื่น ๆ lastคำสั่งจะหยุดทำงานทันทีที่wtmpได้รับการหมุน คำสั่งขึ้นอยู่กับความพร้อมและความสมบูรณ์ของwho utmpและ/proc/1อาจมีวันที่ปัจจุบันแทนวันที่บูตและอาจไม่สามารถใช้งานได้ในระบบที่มีการชุบแข็ง แก้ไข : dmesgมีบัฟเฟอร์ด้านหลังที่มีความยาวคงที่เท่านั้นจึงไม่สามารถใช้งานได้เช่นกัน บันทึกเคอร์เนลอาจอยู่ใน/var/logแต่การกระจายส่วนใหญ่จะเก็บไว้เพียง 8 สัปดาห์เท่านั้น


1
น่าสนใจไม่เห็นด้วยกับwho -bหนึ่งหรือสองนาทีในระบบ 210-up-uptime ของฉัน ดูเหมือนว่าwho -bรายงานการประทับเวลาในขณะนี้นับได้รับผลกระทบอย่างใดโดยกองนาฬิกาแม้ว่าเหล่านี้ได้รับการแก้ไขเป็นระยะ ๆ ntpdโดยทำงาน
Ruslan

3
หลังจากตรวจสอบคำตอบทางเลือกทั้งหมดตัดสินเมื่อ: date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u(ซึ่งมีเวลา / วันที่ใน UTC)
david6

คำตอบของปรากฏการณ์ หากเคอร์เนลไม่ทราบว่าไม่มีใครรู้ว่ามันคือต้นกำเนิดของความจริงสำหรับระบบ วินาทีทำให้การคำนวณเวลาทำได้ง่าย (ฉันสะดุดเพราะฉันต้องการรู้ว่า "โฮสต์ใดของฉันที่ไม่รีบูตในวันสุดท้าย [86,400 วินาที]?")
Mike S

17

ฉันสะดุดกับคำถามนี้ในขณะที่มองหาวิธีที่จะได้รับเวลาบูตที่สอดคล้องและแยกวิเคราะห์เมื่อเทียบกับเวลาตั้งแต่การบูตที่เปลี่ยนแปลงในการโทรทุกครั้ง

ดูเหมือนว่าuptime -sจะทำเคล็ดลับในระบบ Linux ส่วนใหญ่


uptime -s2017-08-09 01:23:45เอาท์พุทเช่น นี่คือสิ่งที่ดีที่สุดโดยง่ายที่สุด คำสั่งนี้รวมอยู่ในแพ็คเกจ "procps"
teika kazura

uptimeใน CentOS 6 ( procps version 3.2.8) ดูเหมือนจะไม่สนับสนุนเรื่องนี้เศร้า
mwfearnley

uptime -sไม่ส่งคืนผลลัพธ์ที่คงที่เสมอไป: superuser.com/q/1247713/71144
cweiske

1
โปรดทราบว่านี่เป็นเวลาท้องถิ่นแต่ไม่ได้พิมพ์เขตเวลา / ออฟเซ็ต ดังนั้นหากคุณต้องการดึงสิ่งนี้ออกจากเครื่องโดยทางโปรแกรมมันไม่เหมาะอย่างยิ่งเนื่องจากคุณอาจต้องกำหนดเขตเวลาแยกต่างหากขึ้นอยู่กับกรณีการใช้งานของคุณ ดังนั้นฉันขอแนะนำคำตอบอื่น ๆ
JJC

11

ฉันพบbtimeบรรทัดใน/proc/statเมื่อ poking รอบเล็กน้อย

cat /proc/stat | grep btime | awk '{ print $2 }'

และหลังจากการค้นหาอย่างรวดเร็วฉันพบหน้านี้: / proc / stat อธิบายซึ่งสรุป "ส่วนต่าง ๆ ของข้อมูลเกี่ยวกับกิจกรรมเคอร์เนลที่มีอยู่ใน /proc/statไฟล์"

บรรทัด "btime" ให้เวลาที่ระบบบูตในไม่กี่วินาทีนับตั้งแต่ยุค Unix


1
ดูเหมือนจะเขียนง่ายกว่ามากawk '/btime/{print $2}' /proc/stat
วิลเลียมเพอร์เซล

@ วิลเลียมเพอร์เซลล์ที่ง่ายที่สุดคือสิ่งที่คุณรู้อยู่แล้ว ฉันไม่มีตัวช่วยสร้าง awk : P
Oddstr13

จุดดี. อย่างไรก็ตามคุณใช้แมวอย่างไร้เหตุผล เพียงแค่ grep จากไฟล์
Mike S

@ MikeS ถูกต้อง - อย่างไรก็ตามฉันยังคงอยู่ข้างสายโซ่คำสั่งดั้งเดิมของฉันเพื่อแสดงให้เห็นอย่างชัดเจนว่าข้อมูลถูกค้นพบที่ไหนแม้แต่ 7 ปีหลังจากคำตอบของฉัน
Oddstr13

8
  • ดี : uptime -s, who -bหรือแยก/proc/uptime
  • ไม่ดี : ls -ld /proc/1และตัวแปร

อย่าใช้ ls -ld / proc / 1 เพื่อจุดประสงค์นี้ บางครั้งจะมีการอัปเดตหลังจาก s2disk หรือ s2ram

ในกรณีของฉันwho -bกล่าวว่า:

ระบบบูต 2 พฤษภาคม 09:51

ในขณะที่ls -ld /proc/1:

dr-xr-xr-x 7 รูทราก 0 พฤษภาคม 3 13:09 น. / proc / 1

ls -ldสำหรับ/procหรือ/sysดูเหมือนจะยังคงมีอยู่หลังจากที่กลับมาทำงาน แต่มันขึ้นอยู่กับการใช้งานและอาจมีการเปลี่ยนแปลงในอนาคตจึงไม่ใช้วิธีการดังกล่าว และถ้านาฬิการะบบของคุณอยู่ในเวลาท้องถิ่นไม่ใช่ UTCจะมีออฟเซ็ตเชิงลบ

(ฉันยังไม่มีสิทธิ์แสดงความคิดเห็นต่อคำตอบดังนั้นโปรดเปิดคำตอบใหม่ขออภัย)

แก้ไข: uptime -sได้รับคำตอบแรกในคำตอบนี้โดยmikegreiling


2

วิธีที่ง่ายที่สุดคือการดูว่าเมื่อใด / sbin / init เริ่มต้น (ซึ่งเป็นกระบวนการแรกที่จะเริ่มต้นหลังจากที่โหลดเคอร์เนลเสมอ):

# ls -ld /proc/1
dr-xr-xr-x 7 root root 0 2011-03-27 23:54 /proc/1

ดังนั้นฉันจะเห็นว่าเครื่องของฉัน booted ขึ้นที่ 6 นาทีถึงเที่ยงคืนในวันที่ 27 มีนาคม 2011

หากคุณต้องการใช้ในการเขียนสคริปต์คุณสามารถใช้statคำสั่งแทน:

# stat --printf='%Y' /proc/1
1301266491

%Yระบุเวลาตั้งแต่ไดเรกทอรีการเปลี่ยนแปลงที่ผ่านมา (เวลาการสร้างกระบวนการ) ในไม่กี่วินาทีตั้งแต่ยุค (1/1/70) และเป็นเวลา Unix มาตรฐาน


1
น่าเสียดายที่นี่ใช้งานไม่ได้: mtime ในโฟลเดอร์เหล่านั้นสามารถเปลี่ยนแปลงได้ด้วยเหตุผลอื่น (ฉันมีระบบที่นี่มีเวลาทำงาน 5 วันและ mtime ของ / proc / 1 คือ 25 นาทีก่อน)
kdt

1
มันไม่น่าเชื่อถือตามที่อธิบายไว้ในคำตอบของฉัน
teika kazura

1

ใน Linux

ls -ld /proc

ดูเหมือนจะให้สิ่งที่ฉันต้องการ โพสต์ด้านบนนั้นแปลก /proc/uptimeไม่มีค่าวันที่ - มันจะต้องถูกลบออกจากเวลาปัจจุบัน บางทีเขาอาจหมายถึง:

date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))

uptime -sให้ค่าวันที่
mikegreiling

1

ภายใต้ Bash ไม่มีท่อหรือกระบวนการอื่น ข้อความเพียง:

$ REPLY="$(</proc/uptime)"
$ REPLY="${REPLY%%.*}"
$ echo "$REPLY"
31207

(เพิ่งใช้REPLYตัวแปรเริ่มต้นซ้ำแต่คุณสามารถเลือกสิ่งที่คุณต้องการ)


แน่นอนว่าทำไมไม่ ค่อนข้างฉลาดใช้สตริงย่อยของตัวแปร เย็น. +1 ขอบคุณสำหรับความคิด!
Mike S

1

สิ่งนี้ดูแข็งแกร่งและจะมอบให้คุณในรูปแบบ UTC และ ISO8601 (ลบสองตัวเลือกสุดท้ายเพื่อปิดการใช้งานอย่างใดอย่างหนึ่งตามลำดับ):

date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u -Iseconds

0
date -d @$(sed -n '/^btime /s///p' /proc/stat)

(อีกวิธีหนึ่งในการทำสิ่งนี้ซึ่งมีประโยชน์ในบางสถานการณ์)


0

คำสั่ง:

(echo ' Currently:' | tr "\n" ' ' ; date +"%Y-%m-%d %k:%M:%S" ; echo '  Up Since:' | tr '\n' ' ' ; uptime -s ; echo '  Duration:' | tr '\n' ' ' ; uptime -p)

เอาท์พุท:

 Currently: 2016-05-09  9:06:29
  Up Since: 2016-05-04 12:56:04
  Duration: up 4 days, 20 hours, 10 minutes

0

ชัดเจนและรัดกุมด้วยคำสั่งtuptime :

# tuptime -t
No.             Startup Date                                          Uptime            Shutdown Date   End                    Downtime

1     09:43:39 AM 08/08/2017      41 days, 0 hours, 51 minutes and 2 seconds   10:34:41 AM 09/18/2017    OK                  10 seconds
2     10:34:51 AM 09/18/2017                         1 minute and 16 seconds   10:36:07 AM 09/18/2017    OK                    1 second
3     10:36:08 AM 09/18/2017                       13 minutes and 20 seconds   10:49:28 AM 09/18/2017    OK                   3 seconds
4     10:49:31 AM 09/18/2017       45 days, 0 hours, 1 minute and 20 seconds   09:50:51 AM 11/02/2017    OK                   4 seconds
5     09:50:55 AM 11/02/2017                       27 minutes and 25 seconds   10:18:20 AM 11/02/2017    OK                   4 seconds
6     10:18:24 AM 11/02/2017                                       9 seconds   10:18:33 AM 11/02/2017    OK                   9 seconds
7     10:18:42 AM 11/02/2017      4 days, 5 hours, 41 minutes and 47 seconds   04:00:29 PM 11/06/2017    OK                  44 seconds
8     04:01:13 PM 11/06/2017    15 days, 17 hours, 33 minutes and 48 seconds   09:35:01 AM 11/22/2017   BAD   10 minutes and 40 seconds
9     09:45:41 AM 11/22/2017               8 hours, 9 minutes and 20 seconds   05:55:01 PM 11/22/2017   BAD     7 minutes and 8 seconds
10    06:02:09 PM 11/22/2017                1 hour, 7 minutes and 54 seconds   07:10:03 PM 11/22/2017   BAD   11 minutes and 30 seconds
11    07:21:33 PM 11/22/2017               1 hour, 58 minutes and 32 seconds   09:20:05 PM 11/22/2017    OK                   5 seconds
12    09:20:10 PM 11/22/2017                       14 minutes and 52 seconds   09:35:02 PM 11/22/2017   BAD    5 minutes and 52 seconds
13    09:40:54 PM 11/22/2017                         4 minutes and 6 seconds   09:45:00 PM 11/22/2017   BAD    4 minutes and 51 seconds
14    09:49:51 PM 11/22/2017             11 hours, 15 minutes and 10 seconds   09:05:01 AM 11/23/2017   BAD    7 minutes and 20 seconds
15    09:12:21 AM 11/23/2017      3 days, 2 hours, 17 minutes and 40 seconds   11:30:01 AM 11/26/2017   BAD   27 minutes and 44 seconds
16    11:57:45 AM 11/26/2017   109 days, 19 hours, 12 minutes and 37 seconds   07:10:22 AM 03/16/2018    OK                  17 seconds
17    07:10:39 AM 03/16/2018     25 days, 3 hours, 55 minutes and 59 seconds   12:06:38 PM 04/10/2018    OK                   3 seconds
18    12:06:41 PM 04/10/2018      8 days, 19 hours, 3 minutes and 20 seconds   07:10:01 AM 04/19/2018   BAD    3 minutes and 52 seconds
19    07:13:53 AM 04/19/2018     77 days, 9 hours, 44 minutes and 39 seconds
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.