2017-09-28 13 views
0

csvファイルの自動生成に問題があります。 csvを生成するために使用されるbashコードは、時間消費を減らすために3つのコアを使用して並列に動作します。最初は異なるcsvファイルが作成され、その後に結合されて1つのcsvファイルが作成されます。コードのコアは、このサイクルである:../src/thunderstormが第二及び連続ファイルを生成.F90コードであるcrontabコマンドを使用してcsvファイルを部分的に作成する

... 
     waitevery=3 

       for j in `seq 1 24`; do 

       if((j==1)); then 
       printf '%s\n' A B C D E | paste -sd ',' >> code${namefile}01${rr}.csv  
       fi 
       j=$(printf "%02d" $j) 

       ../src/thunderstorm --mask-file=mask.grib const_${namefile}$j${rr}.grib surf_${namefile}$j${rr}.grib ua_${namefile}$j${rr}.grib hl_const.grib out &  

       if ! ((c % waitevery)); then 
       wait 
       fi 
       c=$((c+1)) 

      done 
... 

。 このコードを手動で実行すると正しいcsvファイルが生成されますが、プログラムされたcrontabコマンドで実行すると、唯一のヘッダを持つcsvファイルが生成されます

いくつかの提案がありますか? ありがとう!

+0

Fortranの質問にタグfortranを使用します。 Fortran 90は旧式の古いバージョンです。 –

+0

これはスクリプト全体ですか? '#!/ bin/bash'を追加してください。そうでなければ、' cron'はプレーンなBourneシェルを実行している可能性があります。 (あなたがそこに特有の何かbashを持っているなら、手を離してはいけないが、それは傷つきません) – agentp

答えて

1

cronは、しばしば期待に合わない環境でスクリプトを実行します。

PATHが正しいこと、およびスクリプトが正しい場所から呼び出されていることを確認してください:../srcは明らかに相対的ですが、何が対象ですか?

入力、出力、プログラムにフルパスを使用すると、cronスクリプトの方がはるかに信頼性が高くなります。

1

@ umluteが指摘する通り、cronはスクリプトを実行しますが、ターミナルセッションを開いたときの典型的な初期化は実行されません。つまり、あなたの環境に関して何も仮定する必要はありません。シェルから起動することができると私は通常、このような開始何かを追加cronをから呼び出すことができますスクリプトの場合

BIN_DIR=/home/myhome/bin 
PATH=$PATH:$BIN_DIR 

また、必ず実行ファイルへの相対パスを使用していない作ります../src/thunderstormのようになります。 cronによって呼び出されるスクリプトの作業ディレクトリは、あなたの考えではないかもしれません。 $BIN_DIR/../src/thunderstormを使用することができます。入力を保存する場合は、関連するディレクトリをPATHに追加します。

他のすべてのシェル変数についても同じロジックが使用されます。

スクリプトの先頭で適切な初期化を行うと、テスト(または手動実行)のためにシェルから実行してからcronジョブとして実行することができます。

関連する問題