uptime
はマシンの稼働時間を出力することを知っていますが、この出力からカウントダウンするよりも、開始の日付を取得する簡単(信頼できる)方法はありますか?
周りを見回してみました/proc
、関連性のあるものが見つかりませんでした。 dmesg
にも次のような行があります。
[ 0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)
しかし、私はこの方法がディストリビューションとカーネルのバージョンにとらわれないのかと思っていますか?
いくつかのコマンドが見つかりました here 。 who -b
またはlast reboot | head -1
をお試しください。who
は数値の日付を示し、last reboot
は省略された日/月の名前を返します。
これは、カーネルから稼働時間をクエリし、ローカルタイムゾーンで表示します。
date -d "`cut -f1 -d. /proc/uptime` seconds ago"
他のオプションに注意してください。 last
コマンドは、wtmp
がローテーションされるとすぐに機能を停止します。 who
コマンドは、utmp
の可用性と整合性に依存します。そして/proc/1
には、起動時刻の日付ではなく現在の日付が含まれている場合があり、強化されたシステムでは使用できない場合もあります。 編集:dmesg
には固定長のバックバッファーしかないため、実現も困難です。カーネルログは/var/log
しかし、ほとんどのディストリビューションは8週間しか保持しません。
すべての呼び出しで変化するboot since timeとは対照的に、一貫性のある解析可能なboot timeを取得する方法を探しているときに、私はこの質問に遭遇しました。
uptime -s
は、ほとんどのLinuxシステムでトリックを実行します。
/proc/stat
でbtime
行を見つけました。
cat /proc/stat | grep btime | awk '{ print $2 }'
簡単な検索の結果、次のページが見つかりました。 / proc/statの説明 は、「/proc/stat
ファイルで利用できるカーネルアクティビティに関するさまざまな情報」の概要を示しています。
"btime"行は、システムが起動した時刻をUnixエポックからの秒数で示します。
uptime -s
、who -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 によって
最も簡単な方法は、/ 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タイムスタンプです。
これは堅牢に見え、UTCおよびISO8601形式で提供されます。 (最後の2つのオプションを削除して、どちらかをそれぞれ無効にします):
date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u -Iseconds
Linuxでは、
ls -ld /proc
必要なものをくれそうです。上記の投稿は奇妙です。 /proc/uptime
には日付値が含まれていません。現在の時刻から差し引く必要があります。多分彼は意味した:
date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))
Bashの下では、パイプやその他のプロセスはありません。テキストのみ:
$ REPLY="$(</proc/uptime)"
$ REPLY="${REPLY%%.*}"
$ echo "$REPLY"
31207
(REPLY
デフォルト変数を再利用するだけですが、必要に応じて選択できます)
date -d @$(sed -n '/^btime /s///p' /proc/stat)
(これを行う別の方法は、特定の状況で役立ちます)
コマンド:
(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
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