SOS JobScheduler のエージェントが有償ライセンスになったらしい。
でも、有償でなくても、同時に1タスクまでだったら起動できるみたい。
Unix系OSのジョブは、SSHで実行できるので、Windowsのジョブが実行できれば、エージェントがなくても、そんなに困らないと思う。
(エージェントを使いたい状況が、Windowsのジョブ実行以外で、思いつかない。。。)
そこで、JobSchedulerのエージェントを使わずに、Windowsのジョブを実行する方法を考えてみました。
Windowsに OpenSSHサービスを入れる方法もありますが、今回は、最近使い始めた Ansible を利用してWindowsのジョブを実行できるか試してみます。
AnsibleはWindowsに対してWindows Remote Management(WinRM)というものを使用して操作を行います。
Ansible で Windows を操作する環境をセットアップする方法は、下記URLが詳しいです。
Ansible + Windowsの準備
AnsibleでWindowsを使用する手順は上記で紹介したページのとおり。
Windows2012では、PowerShell で以下のようにコマンドを実行しました。
Windows PowerShell Copyright (C) 2012 Microsoft Corporation. All rights reserved. PS C:\Users\Administrator> Get-NetConnectionProfile -IPv4Connectivity Internet Name : ネットワーク InterfaceAlias : イーサネット InterfaceIndex : 12 NetworkCategory : Public IPv4Connectivity : Internet IPv6Connectivity : NoTraffic PS C:\Users\Administrator> Set-NetConnectionProfile -InterfaceAlias (Get-NetConnectionProfile -IPv4Connectivity Internet).InterfaceAlias -NetworkCategory Private PS C:\Users\Administrator> Get-NetConnectionProfile -IPv4Connectivity Internet Name : ネットワーク InterfaceAlias : イーサネット InterfaceIndex : 12 NetworkCategory : Private IPv4Connectivity : Internet IPv6Connectivity : NoTraffic PS C:\Users\Administrator> mkdir C:\work ディレクトリ: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2016/02/27 5:06 work PS C:\Users\Administrator> cd C:\work PS C:\work> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1 PS C:\work> ls ディレクトリ: C:\work Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2016/02/27 5:08 6239 ConfigureRemotingForAnsible.ps1 PS C:\work> powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 wxf : http://schemas.xmlsoap.org/ws/2004/09/transfer a : http://schemas.xmlsoap.org/ws/2004/08/addressing w : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd lang : ja-JP Address : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous ReferenceParameters : ReferenceParameters OK PS C:\work>
Windows側の準備は以上です。
こんどは、JobScheduler をインストールしたマシン(CentOS6)に、Ansible をインストールします。
[root@centos6 ansible]# yum install ansible python-pip [root@centos6 ansible]# pip install pywinrm
イベントリファイル(hosts)を作成してCentOS6からWindows への疎通確認をします。
[root@centos6 ansible]# cat hosts [windows] 10.1.0.114 [windows:vars] ansible_ssh_user=administrator ansible_ssh_pass=p@ssw0rd ansible_ssh_port=5986 ansible_connection=winrm [root@centos6 ansible]# ansible windows -i hosts -m win_ping 10.1.0.114 | success >> { "changed": false, "ping": "pong" }実行結果に success と表示されたら Ansible でWindowsを操作可能です。
テスト用バッチ処理の準備
テスト用に、Windows側に以下のような内容でバッチファイル(c:\work\test.bat)を用意します。
hostname exit 0
CentOS6から Ansible でリモート実行して動作確認します。
[root@centos6 ansible]# ansible windows -i hosts -m raw -a "c:\work\test.bat" 10.1.0.114 | success | rc=0 >> C:\Users\Administrator>hostname WIN-F7P411FIOMA C:\Users\Administrator>exit 0 [root@centos6 ansible]# echo $? 0
ジョブの登録と実行
JobScheduler 用にスタンドアローン・ジョブを作成します。
<job> <script language="shell"> <![CDATA[ ansible windows -i /home/jobs/ansible/hosts -m raw -a "c:\work\test.bat" st=$? echo "status=$st" exit $st ]]> </script> <run_time /> </job>
即時実行するとジョブが正常終了し、ログが以下のように表示されます。
2016-02-27 15:09:57.854+0900 [info] SCHEDULER-918 state=starting (at=2016-02-27 15:09:57.841+0900) 2016-02-27 15:09:57.854+0900 [info] SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.MmXDIF"' 2016-02-27 15:09:58.444+0900 [info] 10.1.0.114 | success | rc=0 >> 2016-02-27 15:09:58.444+0900 [info] 2016-02-27 15:09:58.444+0900 [info] C:\Users\Administrator>hostname 2016-02-27 15:09:58.444+0900 [info] WIN-F7P411FIOMA 2016-02-27 15:09:58.444+0900 [info] 2016-02-27 15:09:58.444+0900 [info] C:\Users\Administrator>exit 0 2016-02-27 15:09:58.444+0900 [info] 2016-02-27 15:09:58.444+0900 [info] 2016-02-27 15:09:58.444+0900 [info] status=0 2016-02-27 15:09:58.445+0900 [info] SCHEDULER-915 Process event
2016-02-27 15:12:19.557+0900 [info] SCHEDULER-918 state=starting (at=2016-02-27 15:12:19.544+0900) 2016-02-27 15:12:19.558+0900 [info] SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.Bt5Hy7"' 2016-02-27 15:12:20.110+0900 [info] 10.1.0.114 | FAILED | rc=1 >> 2016-02-27 15:12:20.110+0900 [info] 2016-02-27 15:12:20.110+0900 [info] C:\Users\Administrator>hostname 2016-02-27 15:12:20.110+0900 [info] WIN-F7P411FIOMA 2016-02-27 15:12:20.110+0900 [info] 2016-02-27 15:12:20.110+0900 [info] C:\Users\Administrator>exit 1 2016-02-27 15:12:20.110+0900 [info] 2016-02-27 15:12:20.110+0900 [info] 2016-02-27 15:12:20.110+0900 [info] status=2 2016-02-27 15:12:20.111+0900 [info] SCHEDULER-915 Process event 2016-02-27 15:12:20.112+0900 [ERROR] SCHEDULER-280 Process terminated with exit code 2 (0x2) 2016-02-27 15:12:20.546+0900 [WARN] SCHEDULER-320 Could not send mail
なんとかなりそう。。