Bagaimana saya dapat dengan andal memeriksa yang terakhir kali mesin Ubuntu terhubung ke internet?

24

Bagaimana saya dapat dengan andal memeriksa yang terakhir kali mesin Ubuntu terhubung ke internet?

Dalam hal ini tidak mungkin, cara untuk memeriksa kapan terakhir kali mesin Ubuntu terhubung ke jaringan sudah cukup baik.

kos
sumber

Jawaban:

28

Metode 1

Meskipun NetworkManager.conf memungkinkan logging, itu tampaknya masih masuk ke syslog. Namun, kern.log juga memilikinya.

grep 'associated' /var/log/kern.log | tail -n1                               
Jun 21 17:08:25 anaconda kernel: [ 4910.819781] wlan1: associated

Metode 2

Saya telah menemukan bahwa NetworkManager menyimpan waktu koneksi terakhir, dan itu diurutkan dalam /var/lib/NetworkManager/timestampsfile, dalam format waktu unix zaman (detik sejak 1970). Tambang saya terlihat seperti ini misalnya:

$ cat /var/lib/NetworkManager/timestamps                                       
[timestamps]
c562ac2d-8911-4273-b165-ed1495b28c9a=1432777079
46cfcdd9-d095-418f-acd6-0a7ca282bb9a=0
d81fb3d0-1717-42c0-903d-4622c2381597=1434895707
b0bdefe6-df88-49bb-83d8-154dd21d77d9=1433093286

Untuk menampilkan entri terbaru

date --date=@"$( awk -F'=' 'BEGIN {var=0}{if(var<$2) var=$2;} END{print var}' /var/lib/NetworkManager/timestamps )"

Awk akan mencari waktu terbesar (dengan kata lain terbaru), dan tanggal akan mengubahnya menjadi bentuk yang dapat dibaca manusia.

Saya menduga juga bahwa file ini ( /var/lib/NetworkManager/timestamps) digunakan oleh menu Edit Edit Koneksi grafis untuk menampilkan waktu koneksi terakhir

masukkan deskripsi gambar di sini

Masalahnya adalah bahwa jika Anda masih terhubung ke titik akses, cara GUI terus nowtidak menunjukkan , waktu ketika koneksi dibuat terakhir

Sergiy Kolodyazhnyy
sumber
Di mana saya menemukan file? :) Juga apakah ini memeriksa kapan terakhir kali mesin terhubung ke internet atau kapan terakhir mesin terhubung ke jaringan? Terakhir, apakah ini berhasil setelah itu?
kos
@kos ternyata masih masuk ke syslog. Saya akan meneliti lebih lanjut, dan jika saya menemukan sesuatu, saya akan memperbarui jawaban saya.
Sergiy Kolodyazhnyy
Ok saya periksa man NetworkManager.conf, file tersebut /etc/NetworkManager/NetworkManager.conf; ini hanya akan berfungsi setelah mengaktifkan logging di daemon, tetapi sayangnya saya perlu memeriksa ini setelahnya seandainya mesin belum dikonfigurasi untuk ini. Pokoknya +1 untuk kern.logsolusi dan untuk solusi pertama yang mungkin dapat membantu dalam kasus lain
kos
2
@kos Jadi file itu mengandung hex-string = epoch-timestamp. string hex adalah titik akses. cap-waktu adalah waktu koneksi terbaru. Coba versi awk saya di sana, saya sudah mengedit jawaban saya
Sergiy Kolodyazhnyy
2
@DeadChex Saya berangkat satu tahun :) Sudah dikoreksi
Sergiy Kolodyazhnyy
6

Anda dapat memeriksa file /var/log/syslogitu akan menampilkan terakhir kali Anda terhubung ke jaringan.


Contoh

Jun 21 08:00:00 Ubuntu dhclient: DHCPREQUEST of 192.0.0.0 on wlan0 to 192.0.0.0 port 67 (xid=0xec7c6e7)

Anda dapat menjalankan perintah grep untuk menarik hanya apa yang Anda butuhkan dari log

< /var/log/syslog grep DHCPREQUEST 
Mark Kirby
sumber
1
+1, masih berharap cara untuk memeriksa kapan terakhir kali terhubung ke internet. Jika tidak ada yang muncul dalam hari ini saya akan menerima jawaban ini. Namun saya ingin menyarankan Anda sedikit lebih banyak solusi yang ramah pengguna seperti < /var/apt/syslog grep DHCPREQUESTatau variasi.
kos
1
DHCPREQUESTtidak bisa diandalkan. Saya online sejak sore dan karena saya punya banyak permintaan DHCP.
AB
@Kos Anda tampaknya salah meletakkan apt di tempat komentar Anda.
Sri
@Sri Memang, itu tergelincir. Untungnya OP tidak jatuh untuk itu!
kos
5

Periksa CONNECTED_GLOBALsetelah kami temukan link connecteddi/var/log/syslog

/link connected/,/CONNECTED_GLOBAL/

% awk '/link connected/,/CONNECTED_GLOBAL/ {line=$0} END{print line}' /var/log/syslog
Jun 21 11:12:54 sturm NetworkManager[736]: <info> NetworkManager state is now CONNECTED_GLOBAL Jun 21 11:12:54

% awk '/link connected/,/CONNECTED_GLOBAL/ {month=$1;day=$2;time=$3} END{print month,day,time}' /var/log/syslog
Jun 21 11:12:54
AB
sumber
Tidak perlu untuk sudoyang pertama, namun tidak ada yang bekerja, saya pikir itu karena POSIXly [[:space:]]. Versi apa awkyang Anda jalankan?
kos
@kos Ups, sudodihapus. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB
Ok sekarang sudah berfungsi :). +1
kos
@kos saya perlu saya %;) Jika ada output di garis bawah
AB
1
Saya tidak suka %. Semua kecuali ini sempurna!
Helio
2

Jika Anda tidak menemukan cara "benar" untuk melakukan ini, Anda selalu dapat membuatnya sendiri!

Fungsi bash berikut akan memberi tahu Anda apakah Anda sedang online (ke Internet) atau tidak.

Anda hanya perlu menulis skrip yang memanggilnya (dalam satu lingkaran dan kemudian tidur) dan mencatat tanggal dan waktu terakhir ke file (menimpa, sehingga hanya memiliki nilai terbaru).

Anda harus menambahkan kode ke loop sehingga memeriksa segera setelah awalnya disebut dan log (jadi keadaan awal Anda diatur dengan benar).

Setelah itu, Anda hanya akan login lagi ketika negara pertama kali offline dan ketika pertama kali online setelah offline. Lebih mudah untuk kode daripada menjelaskan. ;)

Ini akan dibatasi dalam akurasi oleh berapa lama penundaan (tidur) yang Anda gunakan dalam loop (agar tidak menjadi loop yang sangat ketat yang mungkin menghabiskan terlalu banyak sumber daya sistem.) Ini juga tidak akan menyadari apa pun yang terjadi sebelum dimulai atau saat tidak berjalan.

Script itu sendiri dapat dimulai (sebagai pekerjaan latar belakang ( &di akhir doa), mungkin dengan nohupagar tetap berjalan jika proses induknya berakhir) ketika pengguna Anda login dengan menjalankannya dari file $ HOME / .profile Anda, memulainya dengan utilitas autostart desktop Anda (KDE atau Gnome), dari pekerjaan cron yang secara berkala memeriksa untuk melihat apakah itu belum berjalan, atau bahkan dari sistem startup apa pun yang Anda miliki (init / systemd / dll., jika Anda cukup tahu untuk melakukan bahwa.)

Ketika Anda tidak dapat menemukan sesuatu seperti ini yang melakukan persis apa yang Anda inginkan, seringkali tidak terlalu sulit untuk menulis skrip Anda sendiri untuk melakukannya dan menjalankannya seperti daemon di latar belakang.

Cara terbaik untuk menjalankannya dari akun pengguna biasa jika memungkinkan - kecuali jika Anda mengkodekannya dalam bahasa yang kuat seperti C atau Python - karena skrip shell yang berjalan dengan hak akses root sering menimbulkan risiko keamanan.

Pendekatan ini memiliki masalah lain. Terkadang ping akan habis memberikan status offline palsu.

Saya memiliki skrip lengkap, offline_alert , yang cukup banyak berlawanan dengan apa yang Anda inginkan - memberi tahu saya ketika saya luring - tetapi kode ini terbukti bermanfaat. Ini memiliki fungsi offline yang lebih baik yang mencoba untuk mengurangi kesalahan positif dari waktu tunggu ping.

function offline {
  ## Test if offline
  ## Returns 0 if online, 2 if offline
  local RC
  ping -c 1 google.com > /dev/null 2>&1
  RC=$?
  ##echo "offline returning [${RC}]"
  return $RC
}
Joe
sumber
2

Salah satu cara untuk memeriksa log layanan / daemon apa pun yang menyampaikan di Internet agar berfungsi. Misalnya pembaruan NTP (Network Time Protocol).

Lihat dpkg -L ntpdatekait status jaringan

Seperti halnya saya telah memeriksa log untuk desktop Ubuntu, pembaruannya berjalan setiap kali jaringan menyala dan terus mencoba setelah penundaan singkat jika pembaruan terakhir gagal. Menghubungkan ntp.ubuntu.com.

(Catatan, saya menambahkan kolom pertama di output untuk komentar saya)

$ grep -r ntpdate /var/log/syslog*

1st_trial   Jul 14 00:35:56 user-VirtualBox ntpdate[774]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 00:35:56 user-VirtualBox ntpdate[774]: no servers can be used, exiting
2nd_trial   Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: no servers can be used, exiting
3rd_trial   Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: no servers can be used, exiting
4th_trial   Jul 14 03:47:48 user-VirtualBox ntpdate[2917]: step time server 91.189.89.199 offset 3.458355 sec
1st_trial   Jul 14 10:23:07 user-VirtualBox ntpdate[728]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 10:23:07 user-VirtualBox ntpdate[728]: no servers can be used, exiting
2nd_trial   Jul 14 10:37:22 user-VirtualBox ntpdate[2099]: step time server 91.189.89.199 offset 2.021103 sec
dis-/re-con Jul 14 15:27:09 user-VirtualBox ntpdate[20174]: step time server 91.189.89.199 offset 1.677465 sec
1st_trial   Jul 14 23:55:00 user-VirtualBox ntpdate[807]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 23:55:00 user-VirtualBox ntpdate[807]: no servers can be used, exiting
2nd_trial   Jul 15 00:00:24 user-VirtualBox ntpdate[2041]: step time server 91.189.94.4 offset 1.619839 sec
1st_trial   Jul 15 05:39:08 user-VirtualBox ntpdate[767]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:39:08 user-VirtualBox ntpdate[767]: no servers can be used, exiting
2nd_trial   Jul 15 05:39:21 user-VirtualBox ntpdate[1088]: step time server 91.189.94.4 offset 2.897077 sec
1st_trial   Jul 15 05:49:40 user-VirtualBox ntpdate[787]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:49:40 user-VirtualBox ntpdate[787]: no servers can be used, exiting
2nd_trial   Jul 15 05:49:50 user-VirtualBox ntpdate[1101]: adjust time server 91.189.94.4 offset 0.090520 sec
reconnect   Jul 15 05:55:50 user-VirtualBox ntpdate[2251]: adjust time server 91.189.94.4 offset 0.261432 sec
reconnect   Jul 15 06:04:53 user-VirtualBox ntpdate[2702]: step time server 91.189.94.4 offset 0.525658 sec

Saya mengkonfirmasi itu diinstal secara default untuk edisi desktop & server Ubuntu 14.04 LTS 64Bit.

Saya mencobanya di VM, itu hanya menunjukkan waktu menghubungkan atau menghubungkan kembali (dengan Internet tersedia). Bukan yang Anda inginkan (terakhir kali terhubung)

Catatan, syslog adalah log rotate, jika Anda ingin mencari semua log, bahkan yang lama, gunakan zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2
user.dz
sumber
Ini terlihat bagus, namun dapatkah Anda mengonfirmasi ini diaktifkan secara default setidaknya di Desktop Ubuntu? Saya tidak dapat mengujinya secara pribadi sekarang, tetapi saya memang akan melakukannya besok
kos
1
Jangan menghapusnya, ini berguna dan bagus untuk ruang lingkup saya, jika saya mengerti ini akan melaporkan terakhir kali (lebih atau kurang) koneksi persisten telah dibuat, jadi jika saya membiarkan mesin terhubung selama katakan 2 hari itu akan melaporkan tanggal dan waktu kapan koneksi terakhir dibuat, (yaitu 2 hari sebelumnya) kan? Hanya hal terakhir, apa yang terjadi ketika seseorang terputus dari jaringan dan menghubungkan kembali, katakanlah, 5 menit kemudian? Apakah pemeriksaan NTP berjalan lagi? Atau apakah ada semacam ambang batas setelah cek NTP terakhir sebelum pemeriksaan NTP baru dijalankan?
kos
1
@kos, jangan bingung, ntpdatediinstal secara default tetapi tidak ntpd/ openntpddaemon / layanan yang datang dalam paket terpisah. Untuk memeriksa bahwa perubahan waktu & tanggal Anda menjadi salah, putuskan lalu hubungkan kembali.
user.dz
1
@kos, ntpdatedapat digunakan cronuntuk memperbarui waktu secara berkala, ini akan memiliki hasil yang sama dengan menjalankan layanan (ntpd / openntpd). Tetapi Anda mencari konfigurasi default dan tidak ada penyempurnaan tambahan, bukan?
user.dz
1
Maaf, saya salah membaca. Ya saya sedang mencari sesuatu untuk digunakan pada mesin yang tidak dikonfigurasi. Ok, ini bekerja untuk saya, saya akan membiarkan pertanyaan terbuka, mungkin seseorang datang dengan jawaban yang mematikan. Terima kasih! Ini langkah maju yang bagus. Pokoknya pikiran bahwa log-log itu berotasi keras, mungkin Anda ingin menambahkannya ke jawaban Anda.
kos