shell等待到指定时间执行任务

这段代码实现了一个定时任务,比较当前时间和设定的时间,当达到指定时间时触发提醒,间隔时间为5分钟。主要用于等待某一特定时间点的应用场景。
## loop sleep code ##
#otime="16:35:01"                  #定时时间
otime="10:00:01"                  #定时时间
ctime=`date +"%H:%M:%S"`          #当前时间
step=5                            #消息间隔步长
echo "The timing time is : "${otime}, "the current time is : "${ctime} " the step is "${step}
while [[ "${ctime}" != "${otime}" ]]
do
  sleep 1
  ctime=`date +"%H:%M:%S"`
  mi=`date +"%M"`                  #分钟  
  sec=`date +"%S"`                 #秒
  rs=`expr ${mi} % ${step}`        #分钟与间隔取余
  
  if [ ${rs} = 0 ] && [ ${sec} = "01" ]
  then
    echo -e "current time is "`date +"%H:%M:%S"` " wait a few minutes."
  #else
    #echo "sleep 1 second : "`date +"%H:%M:%S"` " -- M: ${mi} S: ${sec} not !"
  fi
done
echo "ctime:"${ctime} " eq otime:"${otime}
## loop sleep code  ##

Shell脚本中等待某个文件存在后执行命令并结束,可以采用多种方式实现,具体取决于对响应速度和资源占用的要求。以下是一些常见的实现方法: ### 使用 `inotifywait` 实现实时监听 `inotifywait` 是 `inotify-tools` 包中的一个工具,能够监听文件系统事件,包括文件的创建、修改和删除等。为了在文件出现后立即执行命令,可以使用如下脚本: ```bash #!/bin/bash FILE_TO_WATCH="/path/to/your/file.txt" COMMAND_TO_EXECUTE="echo 'File has been created.'" while true; do if [ -f "$FILE_TO_WATCH" ]; then $COMMAND_TO_EXECUTE break fi inotifywait -e create "$(dirname "$FILE_TO_WATCH")" > /dev/null 2>&1 done ``` 该脚本通过监听文件所在目录的 `create` 事件,在文件被创建后立即执行指定命令。这种方式的优点是响应速度快,资源占用低,适用于需要即时响应的场景。 ### 使用轮询方式定期检查文件是否存在 如果对响应时间要求不高,可以使用简单的轮询机制。以下是一个使用 `sleep` 和 `while` 循环实现的轮询脚本: ```bash #!/bin/bash FILE_TO_WATCH="/path/to/your/file.txt" COMMAND_TO_EXECUTE="echo 'File has been created.'" while [ ! -f "$FILE_TO_WATCH" ]; do sleep 1 done $COMMAND_TO_EXECUTE ``` 此脚本每隔一秒检查一次文件是否存在,一旦文件出现,立即执行命令并退出。虽然这种方式实现简单,但响应时间取决于轮询间隔,且可能占用一定的系统资源。 ### 使用 `find` 命令配合 `cron` 定时任务 对于某些低优先级任务,可以使用 `find` 命令结合 `cron` 定时任务实现文件存在后的命令执行。例如,创建一个脚本: ```bash #!/bin/bash if [ -f "/path/to/your/file.txt" ]; then echo "File exists." # 执行其他命令 fi ``` 然后在 `crontab` 中配置定时任务: ``` * * * * * /path/to/your/script.sh ``` 这将每分钟运行一次脚本,检查文件是否存在并在存在时执行指定操作。这种方式适合对响应时间要求不高的场景,但无法做到实时响应。 ### 示例:结合 `inotify` 实现高效的文件存在检测 如果希望在高效监听文件系统事件的同时保持脚本的简洁性,可以使用 `inotify` 的 `IN_CREATE` 事件。以下是一个改进版的脚本示例: ```bash #!/bin/bash FILE_TO_WATCH="/path/to/your/file.txt" DIR_TO_WATCH="$(dirname "$FILE_TO_WATCH")" FILENAME="$(basename "$FILE_TO_WATCH")" COMMAND_TO_EXECUTE="echo 'File has been created.'" while true; do inotifywait -e create "$DIR_TO_WATCH" | awk -v file="$FILENAME" '{if ($2 == "CREATE" && $3 == file) exit 0}' || continue $COMMAND_TO_EXECUTE break done ``` 该脚本通过 `inotifywait` 监听文件所在目录的 `create` 事件,并使用 `awk` 过滤出目标文件的创建事件,从而触发命令执行。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值