Bắt đầu ngày giờ khởi động hệ thống trong Linux


44

Tôi biết rằng uptimein thời gian máy đã hoạt động, nhưng có cách nào dễ dàng hơn (đáng tin cậy) để lấy ngày khởi động hơn là đếm ngược từ đầu ra này không?

Tôi đã cố gắng nhìn xung quanh /proc, nhưng không tìm thấy bất cứ điều gì liên quan. Ngoài ra còn có một dòng như thế này trên của tôi dmesg:

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

Nhưng tôi tự hỏi nếu phương pháp này là phân phối và phiên bản hạt nhân?


Những gì unreliable or hardvề uptime?
Bobby

2
@ BOB: Không có gì về lệnh hoặc chức năng của nó, nhưng như đã nói tôi muốn lấy ngày và thời gian khởi động hệ thống lần cuối, không phải là bao lâu kể từ đó. uptimetrả về một chuỗi như "lên 13 ngày, 21:01" và bạn cần tính chuỗi đó từ đó.
Jho

4
Thật là tầm thường khi đếm ngược từ giá trị thời gian hoạt động. Nếu bạn muốn đáng tin cậy , bạn muốn /proc/uptime.
sam hocevar

Câu trả lời:


40

Tôi tìm thấy một số lệnh ở đây . Hãy thử who -bhoặc last reboot | head -1.
whođưa ra ngày số, trong khi last reboottrả về tên ngày / tháng viết tắt.


Nếu chúng ta chỉ muốn ngày và không có gì khác thì sao?
T0xicCode

4
who -b | cut -d' ' -f13chỉ trả về ngày (-f14 thời gian trả về)
charlesbridge

2
Cảnh báo: last rebootkhông cho tôi ngày chính xác! who -bđã làm.
qwertzguy

last rebootcũng cho tôi một ngày không chính xác, wtmp dường như đã được quay vào ngày đầu tiên của tháng
golimar

23

Điều này truy vấn thời gian hoạt động từ kernel và hiển thị nó trong múi giờ địa phương:

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

Hãy cẩn thận về các lựa chọn khác. Các lastlệnh sẽ ngừng làm việc càng sớm càng wtmpđã xoay. Các wholệnh phụ thuộc vào sự sẵn có và tính toàn vẹn của utmp. Và /proc/1có thể có ngày hiện tại thay vì ngày khởi động và thậm chí có thể không khả dụng trên hệ thống cứng. Chỉnh sửa : dmesgchỉ có bộ đệm trở lại có độ dài cố định, vì vậy nó cũng không khả thi. Nhật ký kernel có thể nằm trong /var/lognhưng hầu hết các bản phân phối chỉ giữ được 8 tuần.


1
Thật thú vị, điều này không đồng ý với who -bmột hoặc hai phút trên hệ thống thời gian hoạt động 210 ngày của tôi. Có vẻ như who -bbáo cáo một dấu thời gian, trong khi việc đếm này bằng cách nào đó bị ảnh hưởng bởi sự trôi dạt của đồng hồ, ngay cả khi những điều này được sửa chữa định kỳ bằng cách chạy ntpd.
Ruslan

3
Sau khi xem xét tất cả các câu trả lời thay thế, giải quyết vào: date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u(có thời gian / ngày trong UTC)
david6

Câu trả lời phi thường. Nếu hạt nhân không biết, không ai biết - đó là Nguồn Sự thật cho hệ thống. Các giây giúp dễ dàng thực hiện các phép tính thời gian (Tôi đã vấp phải điều này vì tôi muốn biết "Máy chủ nào của tôi không khởi động lại trong ngày cuối cùng [86,400 giây]?")
Mike S

17

Tôi vấp phải câu hỏi này trong khi tìm cách để có được thời gian khởi động ổn định, có thể phân tích cú pháp , trái ngược với thời gian kể từ khi khởi động thay đổi trên mỗi cuộc gọi.

Có vẻ như uptime -ssẽ thực hiện thủ thuật trên hầu hết các hệ thống linux.


uptime -sđầu ra, ví dụ 2017-08-09 01:23:45. Điều này là tốt nhất, bằng cách đơn giản nhất. Lệnh này được bao gồm trong gói "Procps".
teika kazura

Đáng buồn là uptimetrong CentOS 6 ( procps version 3.2.8) dường như không hỗ trợ điều này.
mwfearnley

uptime -skhông phải lúc nào cũng trả về kết quả không đổi: superuser.com/q/1247713/71144
cweiske

1
Lưu ý rằng điều này luôn luôn là trong localtime , nhưng nó không thực sự in múi giờ / bù đắp. Vì vậy, nếu bạn đang tìm cách lấy cái này từ các máy lập trình, điều đó không lý tưởng, vì bạn có thể cần xác định riêng múi giờ của chúng, tùy thuộc vào trường hợp sử dụng của bạn. Vì vậy, tôi muốn đề xuất một số câu trả lời khác.
JJC

11

Tôi tìm thấy btimedòng trong /proc/statkhi chọc xung quanh một chút

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

và sau khi tìm kiếm nhanh, tôi đã tìm thấy trang này: / Proc / stat giải thích , trong đó nêu ra "Nhiều thông tin khác nhau về hoạt động của hạt nhân có sẵn trong /proc/stattệp."

Dòng "btime" đưa ra thời gian mà hệ thống khởi động, tính bằng giây kể từ thời kỳ Unix.


1
Có vẻ dễ viết hơn nhiềuawk '/btime/{print $2}' /proc/stat
William Pursell

@WilliamPursell dễ nhất luôn là những gì bạn đã biết. Tôi không phải là phù thủy awk. : P
Oddstr13

Điểm tốt. Tuy nhiên, bạn đã sử dụng con mèo một cách vô cớ. Chỉ cần grep từ tập tin.
Mike S

@MikeS đúng - tuy nhiên, tôi vẫn đứng trong chuỗi lệnh ban đầu của mình như một đại diện rõ ràng về nơi tìm thấy thông tin, thậm chí 7 năm sau câu trả lời của tôi.
Oddstr13

8
  • tốt : uptime -s, who -bhoặc phân tích cú pháp/proc/uptime
  • xấu : ls -ld /proc/1và các biến thể.

Không sử dụng ls -ld / Proc / 1 cho mục đích này. Đôi khi, nó được cập nhật sau s2disk hoặc s2ram.

Trong trường hợp của tôi, đã who -bnói:

khởi động hệ thống ngày 2 tháng 5 09:51

Trong khi ls -ld /proc/1:

dr-xr-xr-x 7 root root 0 May 3 13:09 / Proc / 1

ls -ldcho /prochoặc /sysdường như vẫn tồn tại sau khi tiếp tục, nhưng nó phụ thuộc vào việc triển khai và có thể thay đổi trong tương lai, vì vậy đừng sử dụng các phương pháp như vậy. nếu đồng hồ hệ thống của bạn ở chế độ giờ địa phương, không phải UTC , chúng có độ lệch âm.

(Tôi chưa có đặc quyền nhận xét cho câu trả lời, vì vậy đã mở một câu trả lời mới. Xin lỗi.)

EDIT: uptime -slần đầu tiên được trả lời trong câu trả lời này bởi mikegreiling


2

Cách đơn giản nhất là tìm xem khi nào / sbin / init bắt đầu (đó luôn là quá trình đầu tiên được bắt đầu sau khi tải kernel):

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

Vì vậy, tôi có thể thấy rằng máy của tôi đã khởi động lúc 6 phút đến nửa đêm vào ngày 27 tháng 3 năm 2011.

Nếu bạn muốn sử dụng nó trong kịch bản, bạn có thể sử dụng statlệnh thay thế:

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

Chỉ %Yđịnh thời gian kể từ khi thư mục được thay đổi lần cuối (thời gian tạo quy trình) tính bằng giây kể từ epoch (1/1/70) và là dấu thời gian unix tiêu chuẩn.


1
Thật không may, điều này không hoạt động: mtime trên các thư mục đó có thể thay đổi vì những lý do khác (tôi có một hệ thống ở đây có thời gian hoạt động 5 ngày và thời gian của / Proc / 1 là 25 phút trước)
kdt

1
không đáng tin cậy , như được giải thích trong câu trả lời của tôi
teika kazura

1

Trong Linux,

ls -ld /proc

dường như cho tôi những gì tôi cần Bài viết trên là số lẻ. /proc/uptimekhông chứa giá trị ngày - nó sẽ phải được trừ vào thời điểm hiện tại. Có lẽ ý anh là:

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

uptime -scung cấp giá trị ngày
mikegreiling

1

Theo Bash, không có đường ống cũng như các quá trình khác; chỉ văn bản:

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

(Chỉ sử dụng lại REPLYbiến mặc định, nhưng bạn có thể chọn bất cứ thứ gì bạn cần)


Chắc chắn, tại sao không? Kinda sử dụng thông minh của chuỗi con thay đổi. Mát mẻ. +1. Cảm ơn ý tưởng!
Mike S

1

Điều này có vẻ mạnh mẽ và sẽ cung cấp cho bạn ở định dạng UTC và ISO8601. (Xóa hai tùy chọn cuối cùng để vô hiệu hóa tương ứng):

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

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

(một cách khác để làm điều này, rất hữu ích trong một số trường hợp nhất định)


0

Chỉ huy:

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

Đầu ra:

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

0

Rõ ràng và súc tích với lệnh 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.