使用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
相关产品推荐
相关产品推荐

