2013-08-18 47 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