每天运行一次sh脚本

时间:2019-08-08 10:40:54

标签: sh

我正在研究一个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运行。

有什么主意如何确保它运行一次?

1 个答案:

答案 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”秒。您应该考虑一种更精细的算法,以确保不会错过特殊时刻。

相关问题