2013-08-18 72 views
1

如何設置此日誌以獲得準確的時間?我正在嘗試使用date '+%Y%m%d-%H:%M'創建日誌文件。我的輸出發生的事情是時間戳是一樣的。如何使用unix創建更準確的日誌日期

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 

回答

3

首先,您的時間戳值從未改變。更好的方法是每次顯示時使用函數來獲取時間戳。

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

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

但問題是,線被寫入在同一時間(當所有的PROC被終止)日誌文件,所以時間戳是一樣的。 您可能需要在不進行「等待」的情況下執行此操作,並使用循環並檢查每個PID的進程狀態。

+0

這適用於我。 – jdamae

0

我認爲這是因爲它是相同的變種。 只是改變 TIMESTAMP = date '+%Y%m%d-%H:%M' => TIMESTAMP = $(日期 '+%Y%M%D-%H:%M')

,它應該工作

+0

我試過了。仍然得到相同的結果。時代是一樣的。我甚至增加了幾秒鐘。沒有運氣。 – jdamae

+0

並且如果您不使用TIMESTAMP,但每次都輸入日期'+%Y%m%d-%H:%M? – sheplu

+0

我按照你的建議嘗試過。仍在試圖弄清楚。 – jdamae