LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

WindowsでLinuxサーバ上のスクリプトを定期実行する方法の検証

タイトル通りの操作をできるかを検証した。
image.png

-検証環境-
Windows 10
virtualbox VM2台(Centos7)

利用技術/機能 利用目的
Task Manager WindowsからLinuxサーバのスクリプトを定期実行のため
teraTermMacro Jumpサーバにssh接続してShellscriptをKickするため
expect JumpサーバからTargetサーバ上のShellscriptをKickするため
Windows bat ttlを直にTaskManagerに設定すると不都合があっため、詳細は追って説明

設定は画像とは逆の流れで進めていきます。
①Targetサーバ
 ・処理させたいshellscript設置・メモリの使用率を取得する処理とする
②Jumpサーバ
 ・expectをインストール、その機能を利用したshellscript設置)
③WindowsローカルPC 
 ・teraTermMacro (JumpサーバのShellScript Kick用作成)
 ・Windows bat
 ・TaskManager 定期実行設定

1. TargetサーバにShellscript設置

作業対象:Targetサーバ
目的:動かしたい処理のshellscript設置(メモリ使用率を記録する処理とした)

$ cat memory-use-rate-check.sh
#!/bin/bash
# create file memory-use.log
if [[ ! -e /var/tmp/memory-use.log ]]; then
  touch /var/tmp/memory-use.log
  chmod 755 /var/tmp/memory-use.log
fi
# memory use rate check
MemTotal=`free | grep Mem: | awk -F " " '{print$2}'`
MemoFree=`free | grep Mem: | awk -F " " '{print$4}'`

MemUse=`expr $MemTotal - $MemoFree`
MemRate=`expr $MemUse "*" 100 / $MemTotal`

echo `date +%Y-%m-%d/%H:%M` >> /var/tmp/memory-use.log
echo  "Memory Used Rate:" $MemRate"%" >> /var/tmp/memory-use.log

実行結果: ログファイルにメモリ使用率を記録するようなもの。

[vagrant@Target tmp]$ tail -n2 memory-use.log
2020-12-10/11:31 
Memory Used Rate: 16% 

2. expect導入、その機能を使ったshellscript設置。

作業対象:Jumpサーバ
目的:Jumpサーバから1で設置したmemory-use-rate-check.shを遠隔実行。
2-1. expectのインストール

[vagrant@Jump tmp]$ sudo yum install expect -y

2-2.expect機能(対話応答を自動化)を使ったshellscriptを設置。
目的:Jump→targetのmemory-use-rate-check.shをKickする。

[vagrant@Jump tmp]$ cat expect-for-target.sh
#!/bin/sh
expect -c "
set timeout 2
spawn env LANG=C /usr/bin/ssh vagrant@192.168.18.21
expect \"password:\"
send \"vagrant\n\"
expect \"~]$\"
send \"cd /var/tmp\n\"
expect \"]$\"

send \"bash ./memory-use-rate-check.sh\n\"

expect \"tmp]$\"
exit 0
"
[vagrant@Jump tmp]$

3. ローカルのWindowsPC TeratermMacroを設置

作業対象:ローカルWindowsPC
目的:WindowsPC→Jumpサーバ上のexpect-for-target.shをKick
※メモ:このttl(teraTermMacro)はパスワードを暗号化保存する方式にしています。

Expect_test> type jump-expect-kick.ttl  ← catコマンドの代わりで、typeコマンドで中身表示。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
username = 'vagrant'
hostname = '192.168.18.20'
passwdfile = 'passwd.dat'
portnum = '22'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call login
call exec
call exit
end
:login
    getpassword passwdfile username userpasswd
    msg = hostname
    strconcat msg ':portnum /ssh /auth=password /user='
    strconcat msg username
    strconcat msg ' /passwd='
    strconcat msg userpasswd
    strconcat msg inputstr
    connect msg
return
:exec
    wait '$ '
    msg = 'cd '
    strconcat msg '/var/tmp'
    sendln msg

    wait ']$ '
    msg = 'bash ./expect-for-target.sh'
    sendln msg
    pause 8
return
:exit
    wait '$ '
    msg = 'exit'
    sendln msg

4. Windows Task Managerでタスクスケジュール設定を行う。

作業対象:WindowsPC

1.コマンドプロンプトで以下を実行
  compmgmt.msc
  ⇒コンピュータの管理が起動する。

2.タスクスケジューラ
  ⇒タスクスケジューラライブラリを開く。
  右クリック、タスクの作成を開く。
3.タスクの設定
image.png

これで完成。

-追伸-
アドベントカレンダーに急遽参加することとなり、
引き出しにあったのが最近やったことで、こういったものになりました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0