Saya tahu bahwa uptime
mencetak waktu mesin telah dinyalakan dan dijalankan, tetapi adakah cara yang lebih mudah (andal) untuk mendapatkan tanggal memulai daripada menghitung mundur dari hasil ini?
Saya mencoba melihat-lihat /proc
, tetapi tidak menemukan sesuatu yang relevan. Ada juga garis seperti ini di saya dmesg
:
[ 0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812)
Tetapi saya bertanya-tanya apakah metode ini adalah agnostik versi distribusi dan kernel?
unreliable or hard
tentanguptime
?uptime
mengembalikan string seperti "hingga 13 hari, 21:01", dan Anda harus menghitungnya dari itu./proc/uptime
.Jawaban:
Saya menemukan beberapa perintah di sini . Coba
who -b
ataulast reboot | head -1
.who
memberikan tanggal numerik, sementaralast reboot
mengembalikan nama hari / bulan yang disingkat.sumber
who -b | cut -d' ' -f13
hanya tanggal pengembalian (-f14 waktu pengembalian)last reboot
tidak memberi saya tanggal yang benar!who -b
melakukan.last reboot
memberiku tanggal yang salah juga, wtmp tampaknya telah diputar hari pertama bulan ituIni menanyakan waktu aktif dari kernel dan menampilkannya di zona waktu lokal:
Hati-hati dengan pilihan lain. The
last
perintah akan berhenti bekerja secepatwtmp
telah diputar. Thewho
perintah tergantung pada ketersediaan dan integritasutmp
. Dan/proc/1
mungkin memiliki tanggal saat ini daripada tanggal waktu boot, dan bahkan bisa tidak tersedia pada sistem yang diperkeras. Sunting :dmesg
hanya memiliki penyangga punggung panjang tetap, sehingga tidak dapat dibatalkan juga. Kernel log mungkin ada/var/log
tetapi kebanyakan distribusi hanya menyimpannya selama 8 minggu.sumber
who -b
satu atau dua menit pada sistem uptime 210 hari saya. Sepertinyawho -b
melaporkan stempel waktu, sementara penghitungan ini entah bagaimana dipengaruhi oleh drift jam, meskipun ini secara berkala diperbaiki dengan menjalankanntpd
.date -d "`cut -f1 -d. /proc/uptime` seconds ago" -u
(yang memiliki waktu / tanggal di UTC)Saya tersandung pada pertanyaan ini sambil mencari cara untuk mendapatkan waktu boot yang konsisten dan dapat diuraikan , sebagai lawan waktu sejak boot yang berubah pada setiap panggilan.
Tampaknya
uptime -s
akan melakukan trik pada kebanyakan sistem linux.sumber
uptime -s
output misalnya2017-08-09 01:23:45
. Ini yang terbaik, dengan menjadi yang paling sederhana. Perintah ini termasuk dalam paket "procps".uptime
di CentOS 6 (procps version 3.2.8
) tampaknya tidak mendukung ini, sedih.uptime -s
tidak selalu memberikan hasil konstan: superuser.com/q/1247713/71144Saya menemukan
btime
garis/proc/stat
ketika menusuk sedikitdan setelah pencarian cepat, saya menemukan halaman ini: / proc / stat menjelaskan , yang menguraikan "Berbagai informasi tentang aktivitas kernel yang tersedia dalam
/proc/stat
file."sumber
awk '/btime/{print $2}' /proc/stat
uptime -s
,who -b
atau parsing/proc/uptime
ls -ld /proc/1
dan varian.Jangan gunakan ls -ld / proc / 1 untuk tujuan ini. Terkadang diperbarui setelah s2disk atau s2ram.
Dalam kasus saya,
who -b
katakan:boot sistem 2 Mei 09:51
Sementara
ls -ld /proc/1
:dr-xr-xr-x 7 root root 0 3 Mei 13:09 / proc / 1
ls -ld
untuk/proc
atau/sys
tampaknya bertahan setelah melanjutkan, tetapi implementasi tergantung, dan dapat berubah di masa depan, jadi jangan gunakan metode seperti itu. Dan jika jam sistem Anda dalam waktu lokal, bukan UTC , mereka memiliki offset negatif.(Saya belum memiliki hak istimewa untuk mengomentari jawaban, jadi buka jawaban baru. Maaf.)
EDIT:
uptime -s
pertama kali dijawab dalam jawaban ini oleh mikegreilingsumber
Cara paling sederhana adalah dengan melihat kapan / sbin / init dimulai (itu selalu proses pertama yang dimulai setelah kernel dimuat):
Jadi saya dapat melihat bahwa mesin saya boot pada 6 menit hingga tengah malam pada tanggal 27 Maret 2011.
Jika Anda ingin menggunakannya dalam skrip, Anda dapat menggunakan
stat
perintah sebagai gantinya:The
%Y
menspesifikasikan waktu sejak direktori terakhir diubah (waktu penciptaan proses) dalam hitungan detik sejak zaman (1/1/70) dan merupakan unix timestamp standar.sumber
Di Linux,
tampaknya memberi saya apa yang saya butuhkan. Posting di atas aneh.
/proc/uptime
tidak mengandung nilai tanggal - itu harus dikurangi dari waktu saat ini. Mungkin maksudnya:sumber
uptime -s
memberikan nilai tanggalDi bawah Bash, tanpa pipa atau proses lainnya; hanya teks:
(Hanya menggunakan kembali
REPLY
variabel default, tetapi Anda dapat memilih apa pun yang Anda butuhkan)sumber
Ini tampaknya kuat dan akan memberikannya kepada Anda dalam format UTC dan ISO8601. (Hapus dua opsi terakhir untuk menonaktifkan keduanya, masing-masing):
sumber
(Belum cara lain untuk melakukan ini, yang berguna dalam keadaan tertentu)
sumber
Perintah:
Keluaran:
sumber
Jelas dan singkat dengan perintah tuptime :
sumber