背景
私は定期的にサーバーを再起動することに慣れています。今、私は私のADSLルーターにも同じものが欲しいです。
これが私の理由です:ランダムな障害が発生した場合、他のトラブルシューティング(構成の変更など)の前の最初のステップとして、通常、サーバー、インターフェイス、および関連機器(可能な場合)を再起動しようとします。実際、これで問題が修正される場合があります(サービスは期待どおりに機能し始めます)。これは、システムが長時間稼働している場合(ソフトウェアやサービスによっては)、応答しなくなったり、障害が発生したりする可能性があるためです。ソフトウェアが一部のメモリの解放、一部のリソースのロック解除などに失敗した可能性があります
稼働時間外にダウンタイムが許容される一部のサービスについては、自動再起動をスケジュールします。このように、そのようなタイプの問題はあまり頻繁に現れません。そして今、勤務時間中に問題が発生した場合、サービス全体を再起動する必要はありません。代わりに、サービスを再起動した後と同じようにトラブルシューティングを再開します。
私たちが持っているもの
これは10億5000シリーズのルーターであり、管理用にTELNET、HTTP、SNMPをサポートしています。
Telnetメソッド(更新)
これは、telnetコマンドを使用してルーターを再起動することができます。
C:\>telnet 192.168.1.1
Password:********
router>set reboot
近くに、自動的にtelnetし、パスワード文字をプッシュし、「setreboot」コマンドを発行するスクリプトが必要です。 [SvenWによって提案されたexpectを使用するアプローチ]
HTTPメソッド
ADSL接続速度とノイズを監視するためにソフトウェア[1]アプリケーションを利用していることは言うまでもありません。 HTTPインターフェースを介したマージン(ブラウザーアプリケーションの代わりにソフトウェア自体が接続し、無人でログインし、HTTPインターフェースから値を読み取り、グラフに表示します!)。
同様のアプローチ(自動的にログインしてSysRestartボタンをクリックするスクリプト!)でSysRestartを実現できるかどうか疑問に思います。
再起動ページ:
ページのソースHTML:
<html><head>
<meta http-equiv=Content-Script-Type content=text/javascript>
<meta http-equiv=Content-Style-Type content=text/css>
<meta http-equiv=Content-Type content="text/html; charset=
iso-8859-1">
<link rel="stylesheet" href="../css/style.css" type="text/css">
<script language="JavaScript">
function doRefresh()
{
alert("Reboot Complete"); parent.navigation.location.href = "/navigation-status.html";
window.location.href = "../status/status_deviceinfo.htm";
}
function doLoad()
{
}
</script>
</head><body onload="doLoad()">
<FORM METHOD="POST" ACTION="/Forms/tools_system_1" name="System_Restore">
<table width="760" border="0" align=center cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td height="5" class="light-orange" colspan="5"> </td></tr><tr>
<td width="150" height="30" class="title-main">
<font color="#FFFFFF">System Restart</font> </td><td width="10" class="black"> </td><td width="150"></td><td width="10"> </td><td width="440"></td></tr><tr>
<td class="light-orange"> </td><td class="light-orange"></td><td class="tabdata"><div align=right>
<font color="#000000">System Restart with</font> </div></td><td class="tabdata"><div align=center>:</div></td><td class="tabdata">
<INPUT TYPE="RADIO" NAME="restoreFlag" VALUE="0" CHECKED> <font color="#000000">Current Settings</font> </td></tr><tr>
<td class="light-orange"> </td><td class="light-orange"></td><td class="tabdata"> </td><td class="tabdata"> </td><td class="tabdata">
<INPUT TYPE="RADIO" NAME="restoreFlag" VALUE="1"> <font color="#000000">Factory Default Settings</font> </td></tr><tr>
<td class="light-orange"> </td><td class="light-orange"></td><td width="150"> </td><td width="10"> </td><td width="440"> </td></tr></table><table width="760" border="0" align=center cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="160" class="black" height="42" > </td><td width="160" class="orange"> </td><td width="440" class="orange">
<INPUT TYPE="SUBMIT" NAME="Restart" VALUE="RESTART"> </td></tr></table></div></form>
</body></html>
SNMPメソッド
ルータは、SNMPv2の読み取りおよび書き込みコミュニティもサポートしています。このように実行できるのではないかと思いました。
実際、いくつかの検索によって、私はfound[2]一部の人々がSNMPを使用してデバイスを再起動していることを発見しました(しかし、リセットを実行するためにルーターが通過するOID)が見つかりません)
たとえば、これらのデバイスの1つを持っている人は、次のOIDを使用してデバイスを再起動できるようです。
'.1.3.6.1.4.1.207.8.4.4.3.2.0', # Allied Telesyn restart
'.1.3.6.1.4.1.11.2.14.11.1.4.1.0', # Hewlett-Packard hpicfReset
'.1.3.6.1.4.1.9.5.1.1.9.0', # Cisco CatOS sysReset
'.1.3.6.1.4.1.9.2.9.9.0', # Cisco IOS tsMsgSend
'.1.3.6.1.4.1.529.9.8.0.0' # Ascend sysReset
SNMPウォーク
SNMPウォークを使用すると、次のような500を超えるOIDのリストを取得できます。
.1.3.6.1.4.1.16972.5.1.1.0
.1.3.6.1.4.1.16972.4.10.0
...etc (568 more)...
しかし、私は現在、それらの中から1つを選択する方法がわかりません(特に、それらでsnmp-writeをテストすることを恐れています!)。
もう少し情報
他のいくつかの(歩いた)OIDおよび役立つ可能性のある値:
.1.3.6.1.4.1.16972.1.3.0; Trendchip TC3162 T14F7_3.0
.1.3.6.1.4.1.16972.5.1.1.0; www.huawei.com
.1.3.6.1.4.1.16972.1.6.0; Ras Ver:2.10.4.0(UE0.C2C)3.6.0.0 DMT Ver:3.6.0.0
どのようにお手伝いできますか?
脚注:
SNMP用の適切なMIBファイルがない場合、最善の策は、再起動を実行するtelnetコマンドを見つけて、expect
ツールを使用するか、curl
のようなものを使用して使用することです。 Webインターフェイス。
Curlを使用すると、最初にログインしてセッションCookieを保存してから、実際に再起動するために、curlを複数回呼び出す必要がある場合があります。
しかし、私は疑問に思います-定期的な再起動で修正しようとしているデバイスに実際の問題がありますか?そうでなければ、そうする理由がわかりません。
編集:
期待スクリプトの基本的な例。 scriptname hostname password
で呼び出すか、実際のホスト名とパスワードを含むように変数の割り当てを変更します。
#!/usr/bin/expect
set timeout 15
set hostname [lindex $argv 0]
set password [lindex $argv 1]
spawn telnet $hostname
expect "Password:"
send "$password "
expect "router>"
send "set reboot "