说明
关于操作系统及参数
VPS 的系统是 Debian9
crontab 的存储路径为/var/spool/cron/crontabs
概念讲解
cron 是一个守护进程(伴随着电脑一起运行的程序),通过读取配置文件 crontab(cron table)来定时执行 crontab 这个文件中的命令。补充一点,每个用户都可以拥有一个自己的 crontab 文件。
简单来说,cron 负责干活,crontab 负责告诉 cron 怎么干,所以我们要做的就是把我们想要定时执行的命令写入 crontab 中。
安装 cron 及开机自启
大多数系统均预装 cron,如果没有的话自己装
$ apt install cron
设置开机自启
$ systemctl enable cron # 设置 cron 开机自启
如果出现
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable cron
执行
$ /lib/systemd/systemd-sysv-install enable cron
crontab 命令配置 crontab 文件
$ crontab [-u user] [file address] [ -e | -l | -r ]
其中 [-e | -l | -r] 是对 crontab 配置文件层面的操作
- [-u user] 指定某个用户的 crontab 文件,默认为当前用户
- [file address] 从指定位置读取配置信息到
crontabs
中(只有创建或更新 crontab 的时候会用到这个参数) - [-e] 编辑某个用户的 crontab 文件(默认当前用户)
- [-l] 列出某个用户的 crontab 文件中的定时任务(默认当前用户)
- [-r] 删除某个用户的 crontab 文件(默认当前用户)
crontab 怎么写
每一个定时任务在 crontab 中是一行,比如
0 0 1,2,19,20 * * /usr/bin/cerbot renew
表示每个月的 1,2,19,20 号的 0 点 0 分执行/usr/bin/cerbot renew
,具体内容接下来展开说:
# ┌──── minute (0 - 59)
# │ ┌──── hour (0 - 23)
# │ │ ┌─── day of the month (1 - 31)
# │ │ │ ┌──── month (1 - 12)
# │ │ │ │ ┌──── day of the week (0 - 6)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute
通常情况下,每个命令由 6 个部分组成,有些系统会更多,但是这 6 个是通用的。
以下讲解每一部分中常用的 3 个符号,
和-
以及/
第一列是分钟,第二列是小时,剩下的部分类似。如果一个部分要填多个可以用,
比如,每个月的 1,2,19,20 号,就在 day 的那一栏填入1,2,19,20
,逗号隔开即可。如果想表达连续的范围,比如每个月的 3 号到 10 号,当然可以用3,4,5,6,7,8,9,10
,但是略显长,可以用3-10
来替代更加简洁。至于*
就是表示这个部分所有的值。还有/
表示间隔频率,如刚刚表示 3 月到 10 月每两个月执行一次的改为3-10/2
表示 3 月到 10 月,每两个月执行一次。
怎么建立属于自己的 crontab
设置环境变量
编辑当前用户home
目录下的.profile
文件(.profile 文件用来设置当前用户的环境变量)。在其中加入
# 以下指明编辑器用 vi,可以安装自己喜欢的更换
EDITOR=vi; export EDITOR
创建 crontab 文件
$ vi filename # 自己决定文件名
$ crontab filename # 执行后,系统在/var/spool/cron/crontabs 创建与用户名同名的文件,将 filename 中的内容 copy 过去