Create: 2013/03/11
LastUpdate: 2013/04/26
下図の環境を使用します。
環境の詳細を知りたい場合は、メニューに戻って構築手順を参照してください。
JobSheduler では、JobShedulerAgent を使用しなくても、SSHでプログラムをリモート実行するジョブを定義できます。
ここでは、SSHを使用して Host-AのJOB1(上図)と同じになるようなジョブを定義してみます。定義は以下のようになります。
- JobSchedulerAgent を使用しないので、JOB1 は MANAGER 上で実行するように定義します。
- Manager上のJOB1からSSHで、Host-A のプログラムをリモート実行するように定義します。
- SSH実行時に使用するユーザは誰でもいいのですが、今回は "jobsユーザ" を使用することにします。
1.テストアプリケーションの作成
ジョブで実行するテストアプリケーションとして、Host-A に以下のシェルスクリプトを作成します。
ファイル名は、/tmp/test.sh とします。
#!/bin/sh echo "test.sh running." echo "hostname=`uname -n`" exit $?以下のように実行権限を付与します。
$ chmod +x /tmp/test.sh
2.SSHの秘密鍵作成(パスフレーズなし)
Manager サーバから SSH でHost-Aに接続してプログラムを実行する際に、パスワード入力を省略できるように、「パスフレーズなしの秘密鍵」を作成します。
Host-A に jobs ユーザでログインします。
以下のコマンドで公開鍵と秘密鍵を作成します。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/jobs/.ssh/id_rsa): <そのままENTER> Enter passphrase (empty for no passphrase): <そのままENTER> Enter same passphrase again: <そのままENTER> Your identification has been saved in /home/jobs/.ssh/id_rsa. Your public key has been saved in /home/jobs/.ssh/id_rsa.pub. The key fingerprint is: fb:f5:77:9e:5b:7a:09:e9:b7:3d:ed:d4:9c:91:82:c1 jobs@centos6y The key's randomart image is: +--[ RSA 2048]----+ | | | . | | E | | o .| | S . ..o | | . o..+| | . o ..B| | . . o *O| | . +OO| +-----------------+以下のように秘密鍵と公開鍵が出来上がります。
$ ls -l .ssh 合計 12 -rw------- 1 jobs jobs 1675 3月 12 14:11 2013 id_rsa -rw-r--r-- 1 jobs jobs 395 3月 12 14:11 2013 id_rsa.pub -rw-r--r-- 1 jobs jobs 394 2月 20 14:13 2013 known_hosts公開鍵の id_rsa.pub を authorized_keys ファイルに追加して、属性を設定します。
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys $ chmod 644 .ssh/authorized_keys試しに、秘密鍵で自分自身にSSH接続してコマンド実行してみます。
以下のようにコマンドを実行し、パスワードなしで "pwd" コマンドの実行結果が表示されたらOKです。
SSHでの初回接続時は、接続元のホストを承認するかどうか聞かれるので "yes" と答えます。
承認したホストは ~/.ssh/known_hosts に記録されて、2回目以降は聞かれなくなります。
$ ssh -l jobs -i .ssh/id_rsa localhost pwd
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 0b:03:f5:44:f8:ff:1d:d5:eb:57:5f:0b:f7:e8:38:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
/home/jobs
上記のようなSSHのホスト認証を回避して、無条件にホストを承認することもできます。コマンドライン引数に -o 'StrictHostKeyChecking=no' をつけます。
試しに、~/.ssh/known_hosts を削除して、もう一度、初回接続してみると、入力プロンプトが表示されません。
$ ssh -l jobs -i .ssh/id_rsa -o 'StrictHostKeyChecking=no' localhost pwd Warning: Permanently added 'localhost' (RSA) to the list of known hosts. /home/jobsknown_hosts ファイルに接続元を登録したという意味の Warning メッセージは、2回目以降の接続では表示されなくなります。
以上で、入力プロンプトなしでSSH実行できる準備ができたので、SSHの秘密鍵を Manager サーバに 転送しておきます。
$ scp .ssh/id_rsa jobs@192.168.1.61:/tmp/.
3.ジョブの登録&実行
JOE で以下のように、[Process File]タブを使用してジョブを登録します。
- [File] ・・・ ssh コマンドのパス
- [Parameter] ・・・ ssh コマンドの引数
JOCでジョブを 実行 します。
下図のように正常終了すればOKです。
下図は実行結果です。"test_job1_sh" の実行結果が表示され Host-Aのホスト名を確認できます。
SSHでのリモート実行でも、ちゃんと、終了コードを判定します。0以外を返せばジョブのステータスが stopped になります。
■ 補足
上記以外に、JobScheluer の Java アプリケーションを使用したSSHのリモート実行もできるようです。
リモート側プログラムの終了コード判定もしてくれます。
JOE で下図のように "sos.scheduler.job.JobSchedulerSSHJob" クラスを指定します。.
下図のようにパラメータで、接続先とコマンドを指定できます。
この例では、SSHのパスワード認証を使用しています。
下図は実行結果です。