用 Cron 调度脚本

Bash 脚本入门

Alex Scriven

Data Scientist

为何要调度脚本?

 

在很多场景下,调度脚本很有用:

  1. 需要定期执行的任务:每日、每周,或每天多次。
    • 也可用日历提醒,但若忘记了怎么办?
  2. 资源最优化(如在凌晨运行脚本)。

使用 cron 调度脚本是现代数据基础设施的必备技能。

Bash 脚本入门

什么是 cron?

 

Cron 自 70 年代起就是类 Unix 系统的一部分。人类"偷懒"由来已久!

其名称源自希腊语"时间"一词 chronos。

它由 crontab 驱动,crontab 文件包含多个 cronjob,每个 cronjob 指定何时运行何种代码。

Bash 脚本入门

Crontab —— cronjobs 的驱动器

 

您可用以下命令查看当前已安排的(cronjobs):

crontab -l
crontab: no crontab for user

看来我们需要创建一个调度(cronjob)!

Bash 脚本入门

Crontab 与 cronjob 结构

这张来自维基百科的图片展示了如何在 crontab 中构造一个 cronjob。可有多条,每行一条。

crontab 结构

  • 共有 5 个星号位,分别对应时间单位
  • 默认 * 表示"每"
Bash 脚本入门

Cronjob 示例

来看几个 cronjob 示例:

5 1 * * * bash myscript.sh

  • 分钟为 5(过整点 5 分)。小时为 1(凌晨 1 点后)。后三位为 *(每日、每月)。
    • 结论:每天 1:05 运行

 

15 14 * * 7 bash myscript.sh

  • 分钟为 15。小时为 14(下午 2 点后)。中间两位为 *(每月的每天、每年每月)。最后一位为 7(周日)。
    • 结论:每周日 2:15 运行。
Bash 脚本入门

进阶 cronjob 结构

如果想在一天内运行多次,或按每"X"时间增量运行,也可以:

  • 用逗号表示指定分钟。例如:
    • 15,30,45 * * * * 表示在第二个星号指定的每个小时的第 15、30、45 分运行。此处为每小时、每日等。
  • 用斜杠表示"每隔 X"。例如:
    • */15 * * * * 每 15 分钟运行。同样为每小时、每日等。
Bash 脚本入门

您的第一个 cronjob

让我们将名为 extract_data.sh 的脚本安排在每天凌晨 1:30 运行。步骤如下:

  1. 在终端输入 crontab -e 编辑您的 cronjobs 列表。
    • 可能会询问编辑器。nano 比 vi(vim) 更易上手。
  2. 创建 cronjob:
    • 30 1 * * * extract_data.sh
Bash 脚本入门

您的第一个 cron 任务

3. 退出编辑器并保存

若使用 nano(Mac),请按 ctrl + o,回车,再按 ctrl + x 退出。

您会看到 crontab: installing new crontab 提示。

4. 运行 crontab -l 检查是否已保存。

30 1 * * * extract_data.sh

做得好!

Bash 脚本入门

¡Vamos a practicar!

Bash 脚本入门

Preparing Video For Download...