Ubuntuマシンが最後にインターネットに接続されたのはいつかを確実に確認するにはどうすればよいですか?


24

Ubuntuマシンが最後にインターネットに接続されたのはいつかを確実に確認するにはどうすればよいですか?

これが不可能な場合は、Ubuntuマシンがネットワークに最後に接続されたことを確認する方法で十分です。

回答:


28

方法1

NetworkManager.confはロギングを許可しますが、それでも明らかにsyslogに記録されます。ただし、kern.logにもあります。

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

方法2

NetworkManagerは最後の接続時間を/var/lib/NetworkManager/timestamps保存し、UNIXエポック時間形式(1970年からの秒数)でファイルにソートされていることがわかりました。私の場合は、たとえば次のようになります。

$ 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

最新のエントリを表示するには

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

Awkは最大エポック時間(つまり最新)を検索し、日付はそれを人間が読める形式に変換します。

また、このファイル(/var/lib/NetworkManager/timestamps)は、接続の編集グラフィカルメニューで最後の接続時間を表示するために使用されると思われます

ここに画像の説明を入力してください

問題は、アクセスポイントにまだ接続している場合、GUIの方法ではnowなく、接続が最後に確立された時刻が表示され続けることです。


ファイルはどこにありますか?:)また、これは、マシンがインターネットに最後に接続されたとき、またはマシンがネットワークに最後に接続されたときにチェックしますか?最後に、これはその後機能しますか?
コス

@kosは明らかにsyslogに残っているようです。私はもう少し研究するつもりです、そして、何かを見つけたら、答えを更新します。
セルギーKolodyazhnyy

OK man NetworkManager.conf、ファイルは次のとおりです/etc/NetworkManager/NetworkManager.conf。これは、デーモンでのロギングを有効にした後にのみ機能しますが、残念ながら、マシンがこのために設定されていないと仮定して、これを後で確認する必要があります。とにかく、kern.logソリューションと他の場合に役立つ可能性のある最初のソリューション
コス

2
@kosしたがって、そのファイルにはhex-string = epoch-timestampが含まれます。16進文字列はアクセスポイントです。エポックタイムスタンプは、接続の最新時刻です。そこに私のawkのバージョンを試してみて、私は私の答え編集した
Sergiy Kolodyazhnyy

2
@DeadChex私は1年ずれていました:)すでに修正済み
セルギーKolodyazhnyy

6

/var/log/syslog最後にネットワークに接続したときに表示されるファイルを確認できます。


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

grepコマンドを実行して、必要なものだけをログからプルできます。

< /var/log/syslog grep DHCPREQUEST 

1
+1、まだインターネットに接続された最後の時間を確認する方法を期待しています。今日中に何も起こらない場合、私はこの答えを受け入れます。ただし、< /var/apt/syslog grep DHCPREQUESTやバリエーションなど、もう少しユーザーフレンドリーなソリューションを提案したいと思います。
コス

1
DHCPREQUEST信頼できません。私は午後からオンラインで、たくさんのDHCPリクエストがありました。
AB

@Kosは、コメントのログの代わりに誤ってaptを配置したようです。
スリ

@Sri確かに、それはスリップでした。幸運にも、OPはそのために落ちませんでした!
コス

5

CONNECTED_GLOBAL見つけlink connectedた後に確認してください/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

sudo最初のものは必要ありませんが、これらのどれも機能していません。POSIXlyのせいだと思います[[:space:]]。どのバージョンawkを実行していますか?
コス

@kos Ups、sudo削除。GNU Awkの4.1.1、API:1.1(GNU MPFR 3.1.2-P11、GNU MP 6.0.0)
AB

OK、今は動作しています:)。+1
コス

私は私を必要とする@kos %)下の行に出力がある場合;
AB

1
好きではない%。これ以外は完璧です!
ヘリオ

2

これを行う「正しい」方法が見つからない場合は、いつでも独自のものを製造できます。

次のbash関数は、オンライン(インターネット)かどうかを示します。

ループで呼び出してからスリープするスクリプトを作成し、最後の日付と時刻をファイルに記録するだけです(上書きするため、最新の値のみが保持されます)。

ループにコードを追加して、最初に呼び出されてログに記録されるようにチェックする必要があります(したがって、初期状態が正しく設定されます)。

その後、状態が最初にオフラインになったときと、オフラインになってから最初にオンラインになったときにのみ、再度ログを記録します。説明するよりもコーディングする方が簡単です。;)

これは、ループで使用する遅延(スリープ)の長さ(システムリソースを大量に消費する可能性のある非常にタイトなループにならないようにするため)によって、精度が制限されます。または実行されていないとき。

ユーザーが$ HOME / .profileファイルから実行してログインすると、スクリプト自体は(バックグラウンドジョブとして(&呼び出しの最後に)、おそらくnohup親プロセスが終了した場合に実行を続けるために)開始できます。デスクトップ自動起動ユーティリティ(KDEまたはGnome)を使用して、まだ実行されていないかどうかを定期的にチェックするcronジョブから、または起動システム(init / systemd / etc。それ。)

希望どおりの動作をするこのようなものが見つからない場合、それを実行する独自のスクリプトを作成し、バックグラウンドでデーモンのように実行するのはそれほど難しくありません。

可能であれば、通常のユーザーアカウントから実行することをお勧めします-CやPythonなどの堅牢な言語でコーディングしない限り-ルート権限で実行されるシェルスクリプトは多くの場合セキュリティリスクを引き起こすためです。

このアプローチには別の問題があります。pingがタイムアウトして、誤ったオフラインステータスが表示されることがあります。

私は完全なスクリプトoffline_alertを持っています。これは、あなたが望むものとほとんど反対です-オフラインになると警告します-しかし、コードは役に立つかもしれません。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
}

2

インターネットで動作するサービス/デーモンログを確認する1つの方法。たとえば、NTP(Network Time Protocol)の更新。

dpkg -L ntpdateネットワーク状態フックを参照してください

まあ、Ubuntuデスクトップのログを確認したので、ネットワークがアップするたびに更新が実行され、最後の更新が失敗した場合は少し遅れて試行を続けます。接続しntp.ubuntu.comます。

(注、コメントの出力に最初の列を追加しました)

$ 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

Ubuntu 14.04 LTS 64Bitデスクトップおよびサーバーエディションでは、デフォルトでインストールされていることを確認しています。

VMで試してみましたが、接続または再接続する時間のみが表示されます(インターネットが利用可能な場合)。欲しいものではありません(前回は接続されていました)

syslogはローテーションログです。古い圧縮されたログも含めてすべてのログを検索する場合は、 zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2

これはよさそうですが、少なくともUbuntuデスクトップではデフォルトで有効になっていることを確認できますか?私は今それを個人的にテストすることはできませんが、私は実際に明日それを行います
コス

1
それを削除しないでください、それは便利で、私のスコープにとって良いです、これが(多かれ少なかれ)永続的な接続が行われた最後の時間を報告することを理解していれば、たとえば2日間マシンを接続したままにすると報告します最後の接続が行われた日時(2日前)ですか?最後に、たとえば、5分後に誰かがネットワークから切断して再接続するとどうなりますか?NTPチェックは再度実行されますか?または、最後のNTPチェックの後、新しいNTPチェックが実行される前に何らかのしきい値がありますか?
コス

1
混乱しないで、@ kos ntpdateはデフォルトでインストールされますが、個別のパッケージで提供されるntpd/ openntpddaemon / service はインストールされません。時刻と日付を間違ったものに変更したことを確認するには、切断してから再接続します。
user.dz

1
@kosは、定期的に時間を更新するntpdateために使用できcron、サービス(ntpd / openntpd)を実行した場合と同じ結果になります。しかし、デフォルトの構成を探していて、追加の調整は必要ありませんか?
user.dz

1
申し訳ありませんが、誤解しています。はい、構成されていないマシンで使用するものを探していました。わかりました、これは私のために働きます、私はとにかく質問を開いたままにします、多分誰かがキラーアンサーを思い付くでしょう。ありがとう!これは大きな前進です。とにかく、これらのログはタフに回転するので、それを答えに追加したいかもしれません。
コス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.