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

タイトル通りの操作をできるかを検証した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664515/a22fe734-1440-4462-1cc0-e9192377e1a4.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設置（メモリ使用率を記録する処理とした）

```shell
$ 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
```
実行結果: ログファイルにメモリ使用率を記録するようなもの。

```shell
[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のインストール

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

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

```shell
[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)はパスワードを暗号化保存する方式にしています。

```shell
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

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

２．タスクスケジューラ
　　⇒タスクスケジューラライブラリを開く。
　　右クリック、タスクの作成を開く。
３．タスクの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664515/67b7c069-0dde-b6b2-0be8-95432955ad65.png)

これで完成。

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