Crontab Mac/Linux 自动执行脚本或命令

如果你使用 Mac 或 Linux 希望可以定时执行脚本,可以使用 crontab 命令。
比如,定时播放八段锦的 shell 脚本,或者是定时打卡的脚本。如果想要查看 Mac 支持的终端命令可以看 awesome-macos-command-line-zh

基本语法

crontab [选项]

选项功能描述

  • -e 编辑当前用户的 crontab 文件。
  • -l 列出当前用户的 crontab 文件内容。
  • -r 删除当前用户的 crontab 文件。
  • -i 在删除 crontab 时提示用户确认(与 -r 组合使用)。
  • -u 指定用户管理该用户的 crontab 文件(需管理员权限)。

Cron 时间格式

crontab 使用 5 个字段来定义任务的运行时间,加一个命令字段。时间字段以空格分隔:

分钟 小时 日期 月份 星期 命令

分钟 0-59 任务执行的分钟数
小时 0-23 任务执行的小时数
日期 1-31 任务执行的日期(几号)
月份 1-12 或 jan-dec 任务执行的月份
星期 0-7 或 sun-sat 任务执行的星期几(0 和 7 均表示星期日)
命令 任意有效的命令或脚本 要执行的任务

特殊符号说明

  • *:任意值。例如,* 在小时字段表示每小时执行。
  • ,:多个值。例如,1,15 在分钟字段表示第 1 分钟和第 15 分钟执行。
  • -:范围。例如,1-5 在小时字段表示从 1 点到 5 点执行。
  • /:步长。例如,*/5 在分钟字段表示每隔 5 分钟执行一次。

特殊字符串(简化定义)

  • @reboot 系统启动时运行一次
  • @yearly 每年一次(1 月 1 日 0 点)
  • @monthly 每月一次(每月 1 日 0 点)
  • @weekly 每周一次(周日 0 点)
  • @daily 每天一次(0 点)
  • @hourly 每小时一次

用法示例


# 每周一到周五早上 8 点执行任务
0 8 * * 1-5 /path/to/command
# 每隔 10 分钟运行脚本
*/10 * * * * /path/to/script.sh
# 在系统启动时运行脚本
@reboot /path/to/script.sh

查看运行日志

默认情况 crontab 的任务运行后,每次打开Mac 终端提示上方会提示你 You have new mail,这是因为 crontab 执行完任务会自动发送系统邮件,可以使用 mail 命令处理。

哈哈,有 829 封未读
`
输入数字可以查看,每一封是什么,比如输入 829
在这里插入图片描述
这是本地一个 crontab 定时任务执行的日志,可执行文件的路径不存在。才发现文件已经被移动了位置,由于现在也没什么用就把它非注释掉不用执行。
在 mail 界面常用命令操作:

  • t,查看消息, t [数字] 查看指定 mail
  • d,删除消息,输入 d * 删除所有 mail,d [数字] 删除指定 mail
  • q,退出