LoginSignup
4
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-16

タイトル通りの操作をできるかを検証した。
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

これで完成。

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

4
0
0

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
  3. You can use dark theme
What you can do with signing up
4
0