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

如何让Shell脚本仅在23:00-01:00时间段执行指定命令?

问题分析与修复方案

原脚本的核心问题是跨天时间段的数值判断逻辑错误:

  • 230000(23:00)作为数值远大于010000(01:00),所以[[ $currentTime -ge $prodStartTime && $currentTime -le $prodEndTime ]]这个条件永远不会成立,导致脚本永远不会执行进程捕获操作。

修复后的脚本

#!/bin/bash     
prodStartTime="230000"
prodEndTime="010000"
logfile=/tmp/processrunning.txt
touch $logfile

while true
do
    currentTime=$(date +"%H%M%S")
    # 跨天时间段判断:要么是当天23:00之后,要么是次日01:00之前
    if [[ $currentTime -ge $prodStartTime || $currentTime -le $prodEndTime ]]; then
        # 如果需要保留历史日志,将 > 改为 >>
        ps aux | sort -nrk 3,3 | head -n 5 > $logfile
    fi
    sleep 30
done

关键修改说明

  • 把时间判断的&&改为||,覆盖当天23:00到24:00和次日00:00到01:00两个区间
  • 用$(date +"%H%M%S")代替反引号,这是更现代、更安全的命令替换写法
  • 移除了无意义的else :分支,简化代码

后台运行注意事项

用nohup后台运行时,建议显式重定向输出,避免默认生成的nohup.out文件持续增大:

nohup ./script.sh > /dev/null 2>&1 &

如果需要保留脚本自身的运行日志,可以改为:

nohup ./script.sh > /tmp/script_run.log 2>&1 &

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:02:14