我正在研究一个sh
脚本,该脚本从启动时开始,每天需要执行一次命令(将其移至cron是不可选项)。
我的想法是创建一个无限循环并检查电流,如果时间合适,则执行命令。
while true
do
currenttime=$(date +%H:%M)
if [ "$currenttime" = "23:00" ]; then
echo 'IT IS TIME !!!!!!!!!'
fi
sleep 1h
done
问题在于脚本可能在任何时间(即9:14)启动,因此,如果脚本每小时执行一次,则脚本将在23:14运行。
有什么主意如何确保它运行一次?
答案 0 :(得分:0)
由于您显示给我们的时间分辨率是1分钟,因此您可以在另一个循环之前等待一个小时,检查每分钟的时间。之后,您可以进入主循环,该循环每转睡眠1小时。
编辑
while true
do
currenttime=$(date +%M)
echo SYNC $currenttime
if [[ "$currenttime" == "00" ]]; then
break
fi
sleep 1m
done
while true
do
currenttime=$(date +%S:%M)
echo WAIT $currenttime
if [[ "$currenttime" == "23:00" ]]; then
echo 'IT IS TIME !!!!!!!!!'
fi
sleep 1h
done
但是,快速测试显示可能错过了正确的时刻。在此测试中,我用秒而不是分钟,而用分钟而不是小时,它跳过了“ 00”秒。您应该考虑一种更精细的算法,以确保不会错过特殊时刻。