You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何按指定时间条件执行对应定时命令(如不同ls命令)?

嘿,这个需求太常见了!给你两个最实用的实现方式,按需选就行:

方案1:用系统自带的cron(推荐)

cron是Linux/Unix系统默认的定时任务调度器,专门用来处理这种定点执行命令的场景,配置简单还稳定。

你只需要给每个时间点对应的命令写一条cron规则就行,cron的格式是:分钟 小时 日 月 周 要执行的命令。针对你的需求,对应的规则如下:

  • 00:20执行ls20 0 * * * /bin/ls
  • 04:20执行ls -l20 4 * * * /bin/ls -l
  • 08:20执行ls -ltr20 8 * * * /bin/ls -ltr
  • 12:20执行ls -ltrh20 12 * * * /bin/ls -ltrh

配置步骤:

  1. 打开cron编辑器:执行crontab -e(第一次可能会让你选编辑器,选vim或者nano都行)
  2. 把上面的4行规则粘贴进去
  3. 保存退出,cron会自动加载新的任务,无需重启

小提醒:最好用命令的绝对路径(比如/bin/ls),因为cron的环境PATH比普通用户的窄很多,直接写ls可能会出现“命令找不到”的错误。如果想记录执行日志,可以把输出重定向到文件,比如:
20 0 * * * /bin/ls >> /var/log/ls_cron.log 2>&1

方案2:写一个Shell脚本循环检测时间

如果不想依赖cron,或者需要在一个脚本里统一管理所有任务,那可以写个循环检测时间的脚本,逻辑很直观:

#!/bin/bash

while true; do
    # 获取当前时间的「小时:分钟」格式,比如"00:20"
    current_time=$(date +"%H:%M")

    # 匹配对应时间,执行指定命令
    case $current_time in
        "00:20")
            echo "[$(date)] 执行ls命令..."
            /bin/ls
            # 睡61秒,避免同一分钟内重复执行
            sleep 61
            ;;
        "04:20")
            echo "[$(date)] 执行ls -l命令..."
            /bin/ls -l
            sleep 61
            ;;
        "08:20")
            echo "[$(date)] 执行ls -ltr命令..."
            /bin/ls -ltr
            sleep 61
            ;;
        "12:20")
            echo "[$(date)] 执行ls -ltrh命令..."
            /bin/ls -ltrh
            sleep 61
            ;;
        *)
            # 没到目标时间就睡60秒,再重新检查
            sleep 60
            ;;
    esac
done

使用步骤:

  1. 把上面的代码保存为timed_tasks.sh
  2. 给脚本加执行权限:chmod +x timed_tasks.sh
  3. 后台运行脚本:nohup ./timed_tasks.sh &(这样就算你退出终端,脚本也会继续在后台运行)

如果需要开机自动启动这个脚本,可以把nohup /path/to/timed_tasks.sh &加到/etc/rc.local文件里(注意要写脚本的绝对路径),或者用systemd配置一个服务(这个适合更严谨的生产环境)。

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

火山引擎 最新活动