You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用date命令对比毫秒级时间失败,需实现Firefox定时启动

修复定时启动Firefox的Bash脚本问题

问题分析

  • realTime仅在脚本初始化时赋值一次,循环内不会实时更新当前时间,导致永远无法匹配目标时间
  • 时间格式不统一:firstNormalActivityTime是时间戳(秒数),但realTime是HH:MM:SS.ffffff格式的字符串,类型不一致无法直接对比
  • thirdNormalActivityTime存在语法错误,多了一个s字符(13:19s:00.000000)
  • 日志写入方式错误:使用|管道会导致date的输出作为echo的输入,无法正确同时记录消息和时间
  • 精确到微秒的完全匹配几乎不可能触发,脚本大概率永远不会执行Firefox启动逻辑

修复后的脚本

#!/bin/bash

# 定义目标时间(HH:MM:SS格式)
firstTargetTime="19:06:00"
secondTargetTime="13:18:00"
thirdTargetTime="13:19:00"

# 循环实时检查时间
while true
do
    # 获取当前时间(HH:MM:SS格式,去掉微秒避免精确匹配问题)
    currentTime=$(date +"%T")
    
    # 检查是否匹配第一个目标时间
    if [ "$currentTime" = "$firstTargetTime" ]; then
        # 启动Firefox并打开指定链接
        firefox "https://www.youtube.com/watch?v=-iGuyagMv" &
        # 记录启动日志(合并消息和时间)
        echo "Start normal activity: $(date +"%T.%6N")" >> log.log
        # 等待5分钟
        sleep 5m
        # 优雅关闭Firefox(尽量不用-9强制杀死)
        pkill -f firefox
        # 记录结束日志
        echo "End normal activity: $(date +"%T.%6N")" >> log.log
    fi

    # 可添加另外两个时间的检查逻辑,示例:
    # if [ "$currentTime" = "$secondTargetTime" ]; then
    #     echo "Start second activity: $(date +"%T.%6N")" >> log.log
    #     sleep 5m
    #     echo "End second activity: $(date +"%T.%6N")" >> log.log
    # fi

    # 每秒检查一次,降低系统资源占用
    sleep 1
done

关键修复点

  • 循环内实时更新currentTime,确保每次检查都是当前时间
  • 统一使用HH:MM:SS格式做对比,放弃微秒级匹配,大幅提高触发概率
  • 修正thirdTargetTime的语法错误
  • 日志改为合并消息和时间的方式写入,确保日志内容正确
  • 使用&让Firefox后台运行(可根据需求调整)
  • 去掉-9强制杀死进程,优先优雅关闭Firefox
  • 添加sleep 1减少循环频率,降低系统资源占用

内容的提问来源于stack exchange,提问作者Max Melnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:45:07