Crontab-定时任务配置

前言

cron是类Unix操作系统中的作业调度器所以macos上也能用

我们可以使用cron在特定的时间或者定期执行shell脚本或者命令,自定义程度非常高,可以和提醒事项、日历等应用互补使用。

本文主要介绍在macos下cron的一些语法和常用命令,linux系统下用法无区别。

参考

Cron-Archlinux Wiki

常用命令

  1. 查看本用户下所有的crontabs

    1
    $ crontab -l
  2. 删除本用户下的所有crontabs

    1
    $ crontab -r
  3. 编辑本用户的crontabs

    1
    $ crontab -e

    注意:此命令会自动调用系统默认的CLI编辑器进行编辑

Crontab语法

基础

crontab中一行描述一个调度任务,由5+1部分组成

[min][hour][day][month][week]commands
每小时的第几分钟每天的第几个小时每月的第几天每年的第几个月每周的第几天执行要执行的命令
可选值0-5924小时制,可选0-23可选值1-31可选值1-12可选值0-6;0代表星期日

注意:[day]和[week]是冲突的,如果填了[week]字段,则day要无效化,填*

最简单的例子:

30 14 17 8 * bash $HOME/scripts/test

运行效果:8月17日14点30运行scripts目录下的test脚本

进阶:几个特殊符号的含义

“*” 代表取值范围内的所有数字

  • 例子:38 * * * * bash $HOME/scripts/test
  • 代表:每个月的每天的每小时的第38分钟都执行一下test脚本

“/” 代表every,“每隔”

  • 例子:*/15 * * 6 1-5 bash $HOME/scripts/test
  • 代表:六月份的工作日(星期一到星期五)每隔15分钟执行一下test脚本

“,” 用以将非连续的时间点分开

  • 例子:*/15 7-8,12-13 * 8 1-5 bash $HOME/scripts/test
  • 代表:八月份工作日的上午七点到八点和中午十二点到下午一点,每隔十分钟执行一下test脚本

A“-”B 代表从A到B


接下来贴一个来自archlinux wiki的例子,大家可以看一下

*0,*5 9-16 * 1-5,9-12 1-5 /home/user/bin/i_love_cron.sh

Tips

由于cron是在后台自动运行的,我们可以添加命令,使得任务完成时,可以在系统的通知中心获得提醒

archlinux

arch下可以使用notify-send命令,示例如下:

1
$ notify-send 'Touchpad' 'Disabled' -i /usr/share/icons/Qogir-manjaro/24/panel/input-touchpad-off.svg

通知名称:Touchpad,内容:Disabled,并且附带相应主题的图片

macOS

macOS下可利用系统自带的脚本编辑器,命令如下:

1
$ osascript -e 'display notification "通知内容" with title "标题" subtitle "子标题"'