如何使用unix日期创建更准确的日志

时间:2013-08-18 04:11:25

标签: shell unix date logging error-logging

如何设置此日志以获得准确的计时?我正在尝试使用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

2 个答案:

答案 0 :(得分:3)

首先,TIMESTAMP值永远不会改变。更好的方法是使用函数在每次显示时获取时间戳。

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

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

但问题是这些行是同时写入日志文件的(当所有proc都被终止时),所以时间戳是相同的。 您可能需要在没有“等待”的情况下执行此操作,使用循环并检查每个pid的进程状态。

答案 1 :(得分:0)

我认为这是因为它是相同的var。 只是改变 TIMESTAMP = date '+%Y%m%d-%H:%M' => TIMESTAMP = $(日期'+%Y%m%d-%H:%M')

它应该有效