web-dev-qa-db-ja.com

Linuxでのシステム起動日時の取得

uptimeはマシンの稼働時間を出力することを知っていますが、この出力からカウントダウンするよりも、開始の日付を取得する簡単(信頼できる)方法はありますか?

周りを見回してみました/proc、関連性のあるものが見つかりませんでした。 dmesgにも次のような行があります。

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

しかし、私はこの方法がディストリビューションとカーネルのバージョンにとらわれないのかと思っていますか?

45
jho

いくつかのコマンドが見つかりました herewho -bまたはlast reboot | head -1をお試しください。
whoは数値の日付を示し、last rebootは省略された日/月の名前を返します。

41
charlesbridge

これは、カーネルから稼働時間をクエリし、ローカルタイムゾーンで表示します。

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

他のオプションに注意してください。 lastコマンドは、wtmpがローテーションされるとすぐに機能を停止します。 whoコマンドは、utmpの可用性と整合性に依存します。そして/proc/1には、起動時刻の日付ではなく現在の日付が含まれている場合があり、強化されたシステムでは使用できない場合もあります。 編集dmesgには固定長のバックバッファーしかないため、実現も困難です。カーネルログは/var/logしかし、ほとんどのディストリビューションは8週間しか保持しません。

23
sam hocevar

すべての呼び出しで変化するboot since timeとは対照的に、一貫性のある解析可能なboot timeを取得する方法を探しているときに、私はこの質問に遭遇しました。

uptime -sは、ほとんどのLinuxシステムでトリックを実行します。

18
mikegreiling

/proc/statbtime行を見つけました。

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

簡単な検索の結果、次のページが見つかりました。 / proc/statの説明 は、「/proc/statファイルで利用できるカーネルアクティビティに関するさまざまな情報」の概要を示しています。

"btime"行は、システムが起動した時刻をUnixエポックからの秒数で示します。

12
Oddstr13
  • 良いuptime -swho -bまたは解析/proc/uptime
  • 悪いls -ld /proc/1およびバリアント。

この目的でls -ld/proc/1を使用しないでください。 s2diskまたはs2ramの後で更新される場合があります

私の場合、 who -bさんのコメント:

システムブート5月2日09:51

ls -ld /proc/1

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

ls -ld ために /procまたは/sys再開後も持続するようですが、実装に依存し、将来変更される可能性があるため、このようなメソッドは使用しないでください。 AndシステムクロックがUTCではなくローカルタイムの場合、それらは負のオフセットを持ちます。

(まだ回答にコメントする権限がないため、新しい回答を開きました。申し訳ありません。)

編集:uptime -sが最初に回答された この回答ではmikegreiling によって

8
teika kazura

最も簡単な方法は、/ sbin/initがいつ開始されたかを確認することです(これは常に、カーネルのロード後に開始される最初のプロセスです)。

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

したがって、2011年3月27日の6分から真夜中にマシンが起動したことがわかります。

スクリプトで使用する場合は、代わりにstatコマンドを使用できます。

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

%Yは、ディレクトリが最後に変更されてからの時間(プロセス作成時間)を、エポック(1/1/70)からの秒数で指定し、標準のUNIXタイムスタンプです。

2
Majenko

これは堅牢に見え、UTCおよびISO8601形式で提供されます。 (最後の2つのオプションを削除して、どちらかをそれぞれ無効にします):

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

Linuxでは、

ls -ld /proc

必要なものをくれそうです。上記の投稿は奇妙です。 /proc/uptimeには日付値が含まれていません。現在の時刻から差し引く必要があります。多分彼は意味した:

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

Bashの下では、パイプやその他のプロセスはありません。テキストのみ:

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

REPLYデフォルト変数を再利用するだけですが、必要に応じて選択できます)

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

(これを行う別の方法は、特定の状況で役立ちます)

0
AmanicA

コマンド:

(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
LonnieBest

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
0
Rfraile