2016-10-19 14 views
-1

RedHatサーバーには、平均3時間の種類の3GBのaproxファイルを生成するMicrofocus COBOLプログラムが含まれています。プログラムは出力ファイルをディレクトリ/my_test/files/に直接書き込みます。出力ファイルの中にランダムにヌル文字が書かれているのはなぜですか?

問題は、(ランダムに)生成されるファイルの中に、ファイルの途中にヌル文字セクションが含まれていることです。私がそれらをチェックすると、(同じ入力パラメータで)スクリプトを再実行すると、出力ファイルは完全に生成されます(nullcharsは含まれません)。私はそれを何度もチェックしましたが、私はCOBOLプログラムの欠陥ではないことを確信しています(彼らはかなり単純な操作を使用しています)。そのフォルダの使用空間は40%です。

一部のプログラムはデータベースを更新し、リターンコード0で終了した場合は変更がコミットされますが、バックアップはありませんので、これは私がやっていることのポイントです。

これが問題COBOLプログラムの一つのファイル宣言の例です。

FILE-CONTROL. 

SELECT MYFILE 
    ASSIGN      TO MYFILE 
    ORGANIZATION IS SEQUENTIAL 
    ACCESS MODE  IS SEQUENTIAL 
    FILE STATUS  IS FILE-STATUS. 

DATA DIVISION. 
FILE SECTION. 

FD MYFILE 
    LABEL RECORD STANDARD 
    RECORDING MODE F. 
01 REG-OUTPUT PIC X(400). 

私もNULLファイルの前にCOBOLプログラムにヌルをチェックしましたが、残念ながら何のヌルが存在しません発見された。

は、それから私は、次のスクリプトを各5秒を実行crontabファイルを作成する方法について考えた:

if [[ -f /tmp/sorry_im_working ]]; then 
    exit 
fi 

trap 'rm -rf /tmp/sorry_im_working' EXIT 
touch /tmp/sorry_im_working 

lsof | awk 'BEGIN{ 
    sfiles=""; 
} { 
    if($1=="PROGRAM" && $9~/my_test\/files/){ 
     sfiles=sfiles" "$9 
    } 
}END{ 
    comm="find "sfiles" -newermt \x27-2 seconds\x27 -exec env LC_ALL=C bash -c \x27grep -Pq \x22\x5Cx00{200}\x22 <(tail -c 1000 {}) && echo {}\x27 \x5C\x3B"; 
    while(comm | getline sout){ 
     print sout; 
    }; 
    close(comm); 
}' >> /home/ouhma/nullfiles.txt 

したがって、私はあなたに以下の質問お願いしたいと思います:何が起こっているのかの任意のアイデアを

  1. をここに?
  2. 最新の変更ファイルをトリガーする他の方法はありますか?
  3. 私のログには、他に興味のある情報はありますか?
+1

出力ディレクトリはNFSマウントされていますか? – chepner

+0

そうだと思います。とにかく、明日までサーバーにアクセスすることはできません...: – harrison4

+1

Microfocusで処理されているファイルをチェックすると、ヌル文字があることに驚くことはありません。出力ファイルをチェックするためにCobolプログラムの終了を待つ必要があります。 –

答えて

0

あなただけの\ X00でファイルdを構築する場合:

hexdump -C d 
00000000 5c 78 30 30 0a         |\x00.| 
00000005 

とあなた:

grep -Faq '\x00' d;echo $? 
0 

しかし、彼らはD内部にはヌルcaracterじゃないんです。

はたぶん、六角ヌルとMFがしますパッド異なる文字のファイルのために使用される構成とレコード構造に応じて、grep -Paq '\x00'

0

を使用することをお勧めします。

COBOLプログラムの 'ASSIGN'句と 'FD'句をコピーしてください。

ところで、あなたのCOBOLプログラムが3つの計算を実行し、3 GBのデータを書き戻す場合は、ストレージを調査してCOBOLプログラマーにプログラムをチェックさせてもらいます。

+0

nullが原因である可能性があります。「時にはうまくいきます。 –

+0

データが変更された場合、たとえばタイムスタンプが含まれているなど、「時には機能する」というアカウントがあります。 –

0

ファイルに印刷できない文字があると思われます。ヌルの挿入を制御するには、@INSERTNULLファイルの設定を見てください。

+0

nullが原因である可能性があります。 –

+0

真実、私の考えは、問題がどこにあるかを見ることができるように、ヌルの量を減らすかもしれないということでした。 –

+0

データベースに挿入されたレジスタはokです!問題は、それらを出力ファイルに書き出すときです。 – harrison4

関連する問題