db2 コマンドを送信すると su -c コマンドが失敗する

db2 コマンドを送信すると su -c コマンドが失敗する

複数のタスクを実行するように設定されたスクリプトがあり、そのうちの1つはデータベースにテーブルを設定してから削除することです(自動テスト用)。

問題は、少数のユーザーだけがこのsu - user -cコマンドを使用し、db2への呼び出しが失敗することです。しかし、奇妙なことに、su - userdb2コマンドを使用して実行すると(スクリプトの外側で)うまくいきます。この問題は、スクリプトを一度実行した後にスクリプトが実行されている間にのみ発生します。 (いかなる方法でも変更が発生することはわかりませんが、残念ながら正確なコードを共有することはできません。はい/役に立つと面白いでしょう。ここでは、いくつかの基本ループとsu - user -cIBM mqコマンドを呼び出す一連のコマンドのみ含まれています。

たとえば、次は失敗します。

su - user -c "db2 connect to database USER user USING pass; db2 'CREATE TABLE LETABLE (LEFIELD VARCHAR (16))'"

間違い:

DB21016E The Command Line Processor encountered a system error while sending the command to the backend process.
DB21018E A system error occurred. The command line processor could not continue processing.

しかし、これはうまくいきます。

su - user
db2 connect to database USER user USING pass
db2 'CREATE TABLE LETABLE (LEFIELD VARCHAR (16))'

違いがあるかどうかを確認するために、両方のケースでenvコマンドを出力してみましたが、期待どおりに機能しました。また、他のユーザーが実行する順序を調整してみましたが、それも役に立たないようです。

本当に混乱しています。助けてくれてありがとう。

kshシェルを使用しています。

ベストアンサー1

うまくいくような解決策があります。

別々のkshスクリプトを生成し、すべてのdb2コマンドを実行し(接続を確立してからテーブルを作成し、それを許可する)、必要なパラメーターを使用してスクリプトを実行しました。

これは、-c部分にもかかわらず、suインスタンス内で一連のコマンドを実行してスクリプト内で効果的に実行することを意味します。

おすすめ記事