我有一个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之间。
任何帮助将不胜感激。感谢。