bash时间比较出错

时间:2015-08-20 19:41:02

标签: bash shell date scripting

我有一个bash脚本,它创建一个带有时间戳作为名称的文件。一旦经过一段时间,它应该拿起那个文件并用它做一些事情。我想让它在两小时后拿起它,但出于某种原因,它会在57分钟(和6秒)之后捡起它。任何人都可以指出我的逻辑或假设中的错误吗?

以下是详细信息: 我有一个变量设置为2小时(7200秒):

action

我将文件名设置为与纳秒级连接的Unix时间戳:

CustomerID        Object        Color
0001              Cat           White
0001              Dog           Brown
0001              Lamp          White
0002              Car           Blue
0003              Fish          Blue
0003              House         Blue

然后我永远循环直到时机成熟:

SERVICE_DURATION=${SERVICE_DURATION:-7200} # seconds

我无法看清楚这有什么问题。文件名(active_name=`date +%s%N` echo "${1}" >> ${ACTIVE_DIR}/${active_name} )不应小于当前时间减去指定的持续时间(以纳秒为单位while true do for fa in ${ACTIVE_DIR}/* do if [ $(basename ${fa}) -le $(($(date +%s%N) - ${SERVICE_DURATION} * 1000000000)) ] then exec 6< "${fa}" read old_port <&6 read old_host <&6 read old_config <&6 exec 6<&- logger -p daemon.info "Recycling port ${old_port}." start_remote_service "${old_port}" stop_remote_service "${old_port}" "${old_host}" "${old_config}" "${fa}" sleep 2 fi done sleep 30 done ),直到持续时间过去为止。

为了防止脚本不断检查,循环结束时有$(basename ${fa}),所以时间可能介于56:36到57:06之间。

任何帮助将不胜感激。感谢。

0 个答案:

没有答案