ODI Marketplace版のエージェントを起動と停止する方法

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の1つです。
[データ統合 (ODI On-P, ODI MP, OCI DI)](https://qiita.com/letian/items/10152a4fec813c1b7d98#%E3%83%87%E3%83%BC%E3%82%BF%E7%B5%B1%E5%90%88-odi-on-p-odi-marketplace-oci-di)

前回の記事で、OCI MarketplaceからODIインスタンスを起動する方法を紹介しました。インスタンスの起動後、以下のように１個の<font color=blue>スタンドアロン・エージェント</font>が既に<font color=blue>インストールされている</font>状態です。手動でのインストール作業は必要ないので、手間を省きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4ddd7921-a6a6-6bd9-cdc3-1d475767c96e.png)

ODI On-Pの場合、agent.sh/agentstop.sh（Linux OSの場合）を使用してODIスタンドアロン・エージェントを起動/停止することができますが、ODI Marketpalceの場合、どうすればよいですか？

[ODI Marketplaceのバージョンは、12.2.1.4.200618より前](#odi-marketplaceのバージョンは12214200618より前)
[ODI Marketplaceのバージョンは、12.2.1.4.200618以降](#odi-marketplaceのバージョンは12214200618以降)

# ODI Marketplaceのバージョンは、12.2.1.4.200618より前
サービス <font color=blue>agentodi.service</font> を使用して、エージェントの起動/停止を実施します。

__サービスのステータスを確認__
```
sudo systemctl status agentodi.service
```

__エージェントを起動__
```
sudo systemctl start agentodi.service
```

__エージェントを停止__
```
sudo systemctl stop agentodi.service
```

# ODI Marketplaceのバージョンは、12.2.1.4.200618以降
この例では、ODI Marketplace <font color=blue>12.2.1.4.220112</font> を使用します。以下のように、`agentodi.service`が存在しないことを確認できます。

```
[opc@oracle-odi-inst-oqxx ~]$ systemctl list-unit-files --type=service |grep odi
manageappsodi.service                              enabled
mysqlodi.service                                   enabled
opcvncodi.service                                  disabled
oraclevncodi.service                               enabled
[opc@oracle-odi-inst-oqxx ~]$
```

エージェントを起動/停止するには、<font color=blue>manageOdiApps.py</font>を使用する必要があります。
スクリプトを実行する前に、サービスの状態を確認しておくことをお勧めします。 （これはオプションです。）

__サービスのステータスを確認__
コマンド: `sudo systemctl status manageappsodi.service`
```
[opc@oracle-odi-inst-oqxx ~]$ sudo systemctl status manageappsodi.service
● manageappsodi.service - Multi Apps for ODI - instance
   Loaded: loaded (/usr/lib/systemd/system/manageappsodi.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-03-28 08:47:56 GMT; 1s ago
 Main PID: 6749 (python)
    Tasks: 24
   Memory: 233.7M
   CGroup: /system.slice/manageappsodi.service
           tq6749 /bin/python /u01/oracle/mwh/odi/common/scripts/manageOdiApps.py start
           mq6753 java -Drepo.props=odi-setup.properties -Doracle.jdbc.fanEnabled=FALSE -cp ../../sdk/lib/oracle.odi-sdk-jse.j...

Mar 28 08:47:56 oracle-odi-inst-oqxx systemd[1]: Started Multi Apps for ODI - instance .
Mar 28 08:47:56 oracle-odi-inst-oqxx python[6749]: Mar 28, 2022 8:47:56 AM oracle.security.jps.internal.config.xml.XmlCon...ation
Mar 28 08:47:56 oracle-odi-inst-oqxx python[6749]: INFO: JPS Config: /u01/oracle/mwh/odi/common/scripts/jps-config-jse.xml
Mar 28 08:47:56 oracle-odi-inst-oqxx python[6749]: Mar 28, 2022 8:47:56 AM oracle.security.jps.JpsStartup startWithRetry
Mar 28 08:47:56 oracle-odi-inst-oqxx python[6749]: INFO: Jps initializing.
Mar 28 08:47:57 oracle-odi-inst-oqxx python[6749]: Mar 28, 2022 8:47:57 AM oracle.security.jps.JpsStartup startWithRetry
Mar 28 08:47:57 oracle-odi-inst-oqxx python[6749]: INFO: Jps started.
Mar 28 08:47:57 oracle-odi-inst-oqxx python[6749]: Mar 28, 2022 8:47:57 AM oracle.odi.internal.util.OdiLogger info
Mar 28 08:47:57 oracle-odi-inst-oqxx python[6749]: INFO: New data source: [ODIMP_ODI_REPO/*******@jdbc:oracle:thin:@adw01...DW01]
Hint: Some lines were ellipsized, use -l to show in full.
[opc@oracle-odi-inst-oqxx ~]$
```
<strong>注意</strong>
ODI Marketplaceのドキュメントに、書き間違いがあります。
サービス名は、<font color=red>manageodiapps</font>.serviceではなく、<font color=blue>manageappsodi</font>.service です。

__Pythonスクリプトのディレクトリに移動__
`oracle`ユーザーに切り替えて、Pythonスクリプトのディレクトリに移動します。 
```
[opc@oracle-odi-inst-oqxx ~]$ sudo su - oracle
Last login: Fri Mar 25 03:09:18 GMT 2022 on pts/2
[oracle@oracle-odi-inst-oqxx ~]$ cd /u01/oracle/mwh/odi/common/scripts
[oracle@oracle-odi-inst-oqxx scripts]$ ll manageOdiApps.py
-rw-r-----. 1 oracle oracle 5920 Jan 13 03:26 manageOdiApps.py
[oracle@oracle-odi-inst-oqxx scripts]$
```

__エージェントを停止__
コマンド: `python manageOdiApps.py shutdown`

```
[oracle@oracle-odi-inst-oqxx scripts]$ python manageOdiApps.py shutdown
Mar 28, 2022 8:43:10 AM oracle.odi.setup.util.ODIMPJettyServerAppsHelper shutdownProcess
INFO: ODI app server shutdown succesfully.
[oracle@oracle-odi-inst-oqxx scripts]$
```
エージェントの停止後に、「テスト」ボタンをクリックすると、以下のようなメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/793a296a-5000-78d0-8dbc-35cd81049907.png)

__エージェントを起動__
コマンド: `python manageOdiApps.py start`

```
[oracle@oracle-odi-inst-oqxx scripts]$ python manageOdiApps.py start
Mar 28, 2022 8:29:23 AM oracle.security.jps.internal.config.xml.XmlConfigurationFactory validateFileLocation
INFO: JPS Config: /u01/oracle/mwh/odi/common/scripts/jps-config-jse.xml
Mar 28, 2022 8:29:24 AM oracle.security.jps.JpsStartup startWithRetry
INFO: Jps initializing.
Mar 28, 2022 8:29:24 AM oracle.security.jps.JpsStartup startWithRetry
INFO: Jps started.
......
2022-03-28 08:29:56.255:INFO:oejs.Server:main: Started @22441ms
2022-03-28 08:29:57.122 NOTIFICATION ODI-1137 Scheduler started for work repository WORKREP on Agent OracleDIAgent1.
2022-03-28 08:30:06.974 NOTIFICATION Inside cleanStaleSessions ::::::::::::::::::::::::::::::::::::
2022-03-28 08:30:07.097 NOTIFICATION Not an InternatlAgent ::::::::::::::::startContinueLoadPlansThread:::::::::::::::

```
エージェントの起動後に、「テスト」ボタンをクリックすると、以下のような成功メッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/bb5ae6f9-a629-356c-f3ff-907cafcea3de.png)


__エージェントを再起動__
コマンド: `python manageOdiApps.py restart`

<strong>注意</strong>
上記の起動・再起動のコマンドを実施した後、なぜセッションが終了しないのかと思われるかもしれません。ODI MPのドキュメントからの説明は次のとおりです。

「前述のpython manageOdiApps.pyコマンドのいずれかを実行すると、端末にjettyサーバーを実行するための<strong>セッションが保持されます</strong>。他の操作を実行する場合は、新しい端末を開きます。 」

ということで、これは予想される動作です。他の操作を実行するには、新しいターミナルを開く必要があります。ちなみに、stopコマンドはセッションが保持されません。

__以上__

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[ODI On-PとODI MarketplaceとOCI Data Integrationの比較](https://qiita.com/liu-wei/items/dc527ad423fbd2f1742d)
[OCIマーケットプレイスからODIインスタンスを作成する方法](https://qiita.com/liu-wei/items/9a0e92e2e0905976f3ae)
[Autonomous DBにODIレポジトリの作成方法](https://qiita.com/liu-wei/items/9c0c24e51c382c3a2fbf)

__ドキュメント__
[ODI設定の管理 ](https://docs.oracle.com/cd/F23552_01/data-integrator/12.2.1.4/odi-marketplace/managing-odi-setup.html#GUID-854CD512-338B-4BFC-801C-B6EE3F492AE5)