1

このログを正確なタイミングで設定するにはどうすればよいですか? を使用してログファイルを作成しようとしていますdate '+%Y%m%d-%H:%M'。私の出力で何が起こっているかというと、タイムスタンプが同じです。

RUN refresh proc          ===> 20130817-21:05
Waiting for pid:24638     ===> 20130817-21:05
Run parallel scripts      ===> 20130817-21:05
Waiting for pids: 24652   ===> 20130817-21:05
Waiting for pids: 24653   ===> 20130817-21:05
Waiting for pids: 24654   ===> 20130817-21:05
Waiting for pids: 24655   ===> 20130817-21:05
Running post process      ===> 20130817-21:05
Process Complete          ===> 20130817-21:05

私は、このプロセスの間に経過した時間を知っています。ログの作成で何が間違っていますか? これが私の作業スクリプトです:

# Setup job
TIMESTAMP=`date '+%Y%m%d-%H:%M'`;
MYLOG=$BASEDIR/mvhistory.log
#Run Procedures
echo "====================================================" >> $MYLOG 2>&1
echo "RUN refresh proc ===> $TIMESTAMP" >> $MYLOG 2>&1
STAGING.sql &
pid0=$!
wait $pid0
echo "Waiting for pid:$pid0  ===> $TIMESTAMP" >> $MYLOG 2>&1
echo "Run parallel scripts   ===> $TIMESTAMP" >> $MYLOG 2>&1
1.sql &
pid1=$!
2.sql &
pid2=$!
3.sql &
pid3=$!
4.sql &
pid4=$!
wait $pid1 $pid2 $pid3 $pid4
echo "Waiting for pids: $pid1 ===> $TIMESTAMP" >> $MYLOG 2>&1
echo "Waiting for pids: $pid2 ===> $TIMESTAMP" >> $MYLOG 2>&1
echo "Waiting for pids: $pid3 ===> $TIMESTAMP" >> $MYLOG 2>&1
echo "Waiting for pids: $pid4 ===> $TIMESTAMP" >> $MYLOG 2>&1
echo "Running post process    ===> $TIMESTAMP" >> $MYLOG  2>&1
run_CLEAN.sql
echo "Process Complete        ===> $TIMESTAMP" >> $MYLOG  2>&1
exit 0
4

2 に答える 2

3

まず第一に、TIMESTAMP 値は決して変更されません。より良い方法は、関数を使用して、表示するたびにタイムスタンプを取得することです。

getTimestamp() {
    echo `date '+%Y%m%d-%H:%M'`
}

echo "Waiting for pids: $pid1 ===> $(getTimestamp)" >> $MYLOG 2>&1

しかし問題は、行が同時にログ ファイルに書き込まれる (すべての proc が終了したとき) ため、タイムスタンプが同じになることです。おそらく、「待機」せずにループを使用して実行し、各 pid のプロセス状態を確認する必要があります。

于 2013-08-18T09:44:46.777 に答える
0

同じvarだからだと思います。変更するだけ TIMESTAMP= date '+%Y%m%d-%H:%M'=> TIMESTAMP=$(date '+%Y%m%d-%H:%M')

そしてそれはうまくいくはずです

于 2013-08-18T04:19:51.297 に答える