📜  如何让 bash 命令定期运行 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:38:54.635000             🧑  作者: Mango

如何让 bash 命令定期运行 - Shell-Bash

在 Linux 上,Shell 是一种很常用的命令行工具,它可以帮助我们完成一些自动化的任务。有时候我们需要让某个命令或脚本定期运行,比如备份数据或定时清理不必要的日志等。本文将介绍几种在 Shell 中定期运行命令的方法。

使用 crontab

crontab 是一个定期执行任务的工具,它基于时间进行触发。我们可以通过修改 crontab 文件来指定命令的执行时间和频率。

首先,使用 crontab -e 命令来编辑 crontab 文件:

$ crontab -e

crontab 文件中,每一行都表示一个定时任务,格式如下:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of the week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of the month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

例如,如果我们希望每天晚上 10 点执行 backup.sh 脚本,我们可以在 crontab 文件中添加如下一行:

0 22 * * * /path/to/backup.sh

这行命令的含义是:在每天的 22 时 0 分执行 /path/to/backup.sh 脚本。

使用 at

at 命令可以让我们在指定的时间运行一次性的任务。与 crontab 相比,at 更为灵活,可以指定在未来某个时间运行任务。

例如,如果我们希望在下一个小时之后执行 backup.sh 脚本,我们可以执行如下命令:

$ at now + 1 hour
warning: commands will be executed using /bin/sh
at> /path/to/backup.sh
at> ^D

^D 表示 Ctrl + D,用于结束编辑。

使用 sleep

sleep 命令可以让我们在命令行中等待一段时间,然后再执行后续的命令。

例如,如果我们希望每 5 分钟执行一次 backup.sh 脚本,我们可以写一个循环,每次执行后等待 5 分钟再继续执行。

#!/bin/bash
while true; do
    /path/to/backup.sh
    sleep 300  # 5 minutes
done
总结

本文介绍了在 Shell 中定期运行命令的三种方法:crontabatsleep。不同的方法适用于不同的场景,需要根据具体需求进行选择。