RedHat(LinuxONE)のバックグラウンドでJavaのコードを実装する方法

## はじめに
大量の画像をアップロードするような処理ですと、コードの実行で何時間もかかり、他の作業に支障をきたすこともあるかと思います。
今回は、何時間かかる処理をRedHatのバックグラウンドでJavaのコードを実装し、Javaのコードを実行している間にローカルで別の作業ができる方法を記述しますので、参考にしてください。

## サーバー構築
サーバー構築、サーバーにログインに関しては、下記URLから行ってください。
今回は、LinuxONEでRedHatのサーバーを構築し、TeraTermでRedHatにログインします。
http://qiita.com/takana-at/items/e51a2e5fa858fbdee19f

## サーバー上にローカルファイルを移動できるようにする
RedHatのサーバー上にローカルファイルを移動、またローカルにサーバー上のファイルをWinSCPを使用しますので、WinSCPの環境を構築します。

### 鍵の変換
1. PuttyGemをインストールします。  
登録方法は、下記URLを参考にしてください。  
https://webkaru.net/linux/putty-install/  
　　
2. .ppkファイルを作成します。  
「Conversions」→「Import key」を選択します。 
![linuxone2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/9fcb12ec-8168-0276-bdc3-9375f7fbc51f.png)  
　　
3. サーバー構築時に作成した.pemファイルを指定します。
![putty_re2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/13bfdf29-30a3-5330-19da-9d2b518fb0d4.png)  
　　
4. .pemファイルのパスワードを入力します。  
![putty_re3.png](https://qiita-image-store.s3.amazonaws.com/0/185050/4618d877-948e-fbfe-9bd9-d99cb73c3eec.png)  
　　
5. importできたら、任意の「key_passphrase」、「Confirm_passphrase」を入力し、「save private key」をクリックします。  
![putty3.png](https://qiita-image-store.s3.amazonaws.com/0/185050/523487a4-fe84-a6d7-b317-501de7ab293d.png)  
　　
6. ファイルの保存画面になりましたら、「ファイル名」に任意の名前を入力し、「ファイルの種類」に「.ppk」形式を指定し、「保存」ボタンをクリックします。  
![putty4.png](https://qiita-image-store.s3.amazonaws.com/0/185050/b8f45010-d4eb-991b-49f1-f929ad56cd7b.png)  
　　
7. 「pem」形式のファイルから、「ppk」形式のファイルを作成することができました。  
![putty5.png](https://qiita-image-store.s3.amazonaws.com/0/185050/f1cb5485-01cc-c8e2-d6d4-00ebf531a37b.png)

### winSCPをインストール
登録方法は、下記URLを参考にしてください。
http://www.media.hiroshima-u.ac.jp/services/web/winscp  

### winSCPでサーバーにログイン  
1. winSCPを起動します。  
　　
2. 「転送プロトコル」にSFTPを指定し、「ホスト名」にLinuxONEで構築したRedHatのサーバーのIPアドレス、「ユーザー名」に、TeraTermで設定したユーザー名を入力します。
![winscp1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/b4f6e7fa-eb25-b588-01af-7995e4adcd63.png)  
　　
3. 「編集」をクリックし、秘密鍵を指定しますので、「設定」をクリックします。  
![winscp2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/bd9884fd-8faa-08e1-a99e-6f3a7e4fdfe3.png)  
　　
4. 「SSH」→「認証」をクリックし、「秘密鍵」にputtyGenでppk形式に変換したファイルを指定し、「OK」をクリックします。  
![winscp3.png](https://qiita-image-store.s3.amazonaws.com/0/185050/da88a991-8078-b0be-7935-e591711b8d4f.png)  
　　
5. 「保存」→「ログイン」の順でクリックします。  
![winscp4.png](https://qiita-image-store.s3.amazonaws.com/0/185050/401556a0-479f-be99-c02f-529f7b50469f.png)  
　　
6. 秘密鍵のパスワードを入力し、「OK」ボタンをクリックします。  
![winscp_ew1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/19b0b2fb-595f-0245-9ccd-252b640d79be.png)  
　　
7. winSCPでRedHatのサーバーにアクセスしているときの画面です。  
![rewinscp1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/6862d6c1-b941-cf54-adc4-1fd64b9a2e9a.png)  
　　
8. サーバーにアクセスできると下記の画面が表示されます。  
左側がローカルのディレクトリ、右側がサーバー上のディレクトリになります。  
![winscp5.png](https://qiita-image-store.s3.amazonaws.com/0/185050/065419fd-0a79-5365-ad2e-17cc7b20730a.png)  


## 実行するコードの準備
### 実行プロジェクトを圧縮  
1. eclipseを開きます。  
　　
2. 「File」→「Export」を選択します。  
「General」→「Archive File」を選択し、「Next」をクリックします。   
![archive1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/9916547c-223f-bb4b-48f6-8ac3fbceb050.png)  
　　
3. 圧縮するプロジェクトを選択し、「To archive file」にファイルを作成するディレクトリ、zipファイル名を指定し、「Finish」をクリックします。  
![archive2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/07ad0e9d-6847-bc37-7aa1-623693e2ff51.png)  
　　
4. zipファイルをサーバーにコピーします。
ドロップ＆ドラッグで実行するzipファイルをコピーすることができます。  
![winscp6.png](https://qiita-image-store.s3.amazonaws.com/0/185050/802ce1b9-1f21-fc64-aa6d-4c710205aeb6.png)  

### crawler.shを準備
1. crawler.shファイルを作成します。  
実行するプロジェクトのどのコードを実行するかを指定し、「crawler.sh」ファイルを作成します。  
下記のコードは、crawler.shファイルの記入例で、「FILENAME」にどのファイルを実行するか、「\$1 \$2 \$3」に引数を示しています。

```ruby:crawler.shの記入例
#!/bin/sh

cd demoApp/target/classes

java -classpath .:../../lib/commons-codec-1.4.jar:../../lib/commons-httpclient-3.1.jar:../../lib/commons-logging-1.1.1.jar:../../lib/mysql-connector-java-5.1.21-bin.jar:../../lib/httpclient-4.5.1.jar:../../lib/httpclient-cache-4.5.1.jar:../../lib/javase-3.3.0.jar:../../lib/httpcore-4.4.3.jar:../../lib/httpmime-4.5.1.jar:../../lib/json-simple-1.1.1.jar FILENAME $1 $2 $3

cd ../../..
```  
　　
2. 保存したら、crawler.shファイルをサーバー上にコピーしてください。
![winscp7.png](https://qiita-image-store.s3.amazonaws.com/0/185050/027fd9b5-6cf0-1cfe-4d4e-9776a7ac92f3.png)

これでサーバー上でコード実行する準備が整いました。

## 実行環境構築
### RedHatにJavaをインストール
1. TeraTermでRedHatにログインした状態で、圧縮したコードのJavaのバージョンと同じバージョンをインストールします。  
Javaのバージョンが異なると、「java.lang.UnsupportedClassVersionError」となりますので、注意してください。

```
 $sudo yum install java-1.8.0-ibm-devel
```

![javav1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/c93a6142-5e4c-a6e6-ce16-b609a16cd725.png)  
　　
2. インストールの確認を求められたら、「y」をクリックします。  
![java4.png](https://qiita-image-store.s3.amazonaws.com/0/185050/3ccb9bfa-9bd3-da55-bd5b-896847bba324.png)  
インストールしたJavaのバージョンと「Completed!」という文字が表示されれば、Javaのインストール完了です。  

### RedHatにscreenをインストール
TeraTermでRedHatにログインした状態でscreenをインストールします。

```
 $sudo yum install screen
```  
![java9.png](https://qiita-image-store.s3.amazonaws.com/0/185050/95a5afcc-75c4-4230-6691-0697b1080067.png)

## RedHadのバックグラウンドでJavaのコードを実行する
### screenを実行
RedHatでそのままコマンドを実行すると、バックグラウンドで実行した状態にできないので、screen内でコマンドを実行します。

1. screenを実行しますので、下記をコマンドで実行します。

```
 $screen
```  
![screen1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/3ad53966-87ca-c5cd-3c75-6238caa6726d.png)  
　　
2. scrennを実行すると、上部に「screen0」と表示されます。
![screen2.png](https://qiita-image-store.s3.amazonaws.com/0/185050/cad38676-273a-e170-772c-444a0acdb99b.png)
これでscreenが実行できました。

### 圧縮ファイルの解凍
1. screenを実行後、現在のディレクトリを「ls」で確認します。  
このとき、先ほどサーバーにコピーしたzipファイルがない場合は、サーバーにコピーしたzipファイルの1つ上のディレクトリに移動します。  
![screen4_1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/714cd158-fa7b-546a-cfb7-c07c3bc364ad.png)  
　　
2. zipファイルを展開しますので、下記コードを実行します。  
FILENAMEはご自身のzipファイル名に変更してください。

```
 $unzip FILENAME
```  
![screen5_1.png](https://qiita-image-store.s3.amazonaws.com/0/185050/d57b7605-9a7d-8d15-a498-07da4b53b7dc.png)

### crawler.shファイルの実行
1. crawler.shファイルを実行する権限を追加しますので、下記コードを実行してください。

```
 $chmod +x crawler.sh
```  
　　
2. crawler.shファイルを実行します。
crawler.shを実行することで、crawler.shファイル内で指定したファイルをRedHatで実行することができます。

```
 $./crawler.sh
```  
![screen6.png](https://qiita-image-store.s3.amazonaws.com/0/185050/882a8e9d-192b-7d30-8cd0-d4bd64a66c7d.png)  
　　
3. デタッチ、アタッチする場合は下記のURLを参照してください。
 3-1. デタッチの方法
http://qiita.com/takana-at/items/77120a75e155e180a5d4#%E3%83%87%E3%82%BF%E3%83%83%E3%83%81  
 3-2. アタッチの方法
http://qiita.com/takana-at/items/77120a75e155e180a5d4#%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81  
　　
[link-detach]:http://qiita.com/takana-at/items/77120a75e155e180a5d4#%E3%83%87%E3%82%BF%E3%83%83%E3%83%81
[link-attach]:http://qiita.com/takana-at/items/77120a75e155e180a5d4#%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81