意地でもログ取りを続けるTeratermマクロ

サーバが、シャットダウンしようがリブートしようがクラッシュしようが、なんとしてでもログを取り続ける、そんなマクロをTeratermで作成した。
サーバをシャットダウンしても再度起動すれば、自動で connect してログを取り、コマンドを投入する。
サーバのシャットダウンを伴うテストや、OSクラッシュテスト、定期的にリブートするようなシステムに利用できる。
OpenSSHをインストールしていれば、Windowsサーバでも利用できるかも。

; それぞれのプロンプトはシステムによって任意に変更する
; 一般ユーザプロンプト
PRMTU = " ~]$ "
; スーパーユーザープロンプト
PRMTS = " ~]# "
; パスワードプロンプト、su で使う
PRMTP = "パスワード:"

SVR = "192.168.1.100:22 /ssh /auth=password /user=USER_NAME /passwd=USER_PASSWORD"
; タイムアウト時間は、システムの状態に合わせて調整する
; シャットダウンやクラッシュでプロンプトの応答がなかった時のタイムアウト時間となる
timeout = 5

; 投入するコマンド群
strdim CMDSTR 17

CMDSTR[  0] = "su -"
CMDSTR[  1] = "shutdown -h now"
CMDSTR[  2] = "su -"
CMDSTR[  3] = "shutdown -r now"
CMDSTR[  4] = "lscpu"
CMDSTR[  5] = "free -m"
CMDSTR[  6] = "lsblk -o NMAME,MOUNTPOINT,FSTYPE,SIZE"
CMDSTR[  7] = "su -"
CMDSTR[  8] = "echo 1 > /proc/sys/kernel/sysrq"
CMDSTR[  9] = "echo c > /proc/sysrq-trigger"
CMDSTR[ 10] = "su -"
CMDSTR[ 11] = "ls -l /var/crash/*"
CMDSTR[ 12] = "rm -rf /var/crash/*"
CMDSTR[ 13] = "ls -l /var"
CMDSTR[ 14] = "ls -l /var/crash/*"
CMDSTR[ 15] = "exit"
CMDSTR[ 16] = "exit"

  for i 0 16
    testlink
    if result <> 2 call sub_CNTSVR

    sendln CMDSTR[ i]
    wait PRMTU PRMTS PRMTP

    if result = 0 then
; プロンプトの応答がなかったら、unlink する
      disconnect 0
      unlink
    elseif result = 3 then
; パスワードプロンプトが帰ってきたら、su のパスワードを投入する
      call sub_SU
    endif
  next
end

; サーバコネクト
:sub_CNTSVR
  unlink
; サーバが落ちるなどで切断されると
; connect 前に unlink する必要がある
  do
    mpause 10
    testlink
  loop while result = 2
; 確実に unlink 出来ていることを確認

  do
    connect SVR
    testlink
    if result = 2 break
    unlink
    pause 10
  loop
; 接続できるまでひたすら connect を繰り返す

  wait PRMTU
  logopen "test.log" 0 1
  sendln
  wait PRMTU
  sendln "date"
  wait PRMTU
return

:sub_SU
  sendln "SUPER_USER_PASSWORD"
  wait PRMTS
return

コメントを残す

メールアドレスが公開されることはありません。