Linux Crontab 命令安装和使用教程:在 VPS 上设置定时任务

651 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

本文同时参与 「掘力星计划」  ,赢取创作大礼包,挑战创作激励金

一、Crontab 命令安装教程

首先检查一下 Crontab 是否安装:

crontab -l

如果没报错,就是已经安装好了,一般来说系统都会自带。

如果没安装,进行安装:

CentOS:

yum install vixie-cron
yum install crontabs

Ubuntu:

apt-get install cron

二、Crontab 命令使用教程

命令格式:

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

是不是觉得怪复杂的,其实一般来说其实就三个命令:

  • 列出所有定时任务:crontab -l
  • 编辑所有定时任务:crontab -e
  • 删除所有定时任务:crontab -r

使用 crontab -l 可以列出所有的定时任务,一行一个任务,一般来说,每行的格式如下:

分 时 日 月 星期 要运行的命令
  • 第 1 列:分钟,取值范围:0~59
  • 第 2 列:小时,取值范围:0~23(0表示子夜)
  • 第 3 列:日,取值范围:1~31
  • 第 4 列:月,取值范围:1~12
  • 第 5 列:星期,取值范围:0~7(0 和 7 表示星期天)
  • 第 6 列:要运行的命令

对于每一列,有如下几种表示方法:

  • *:每单位(比如每分钟,每小时)
  • 具体数字:就是具体的时间或者日期
  • 取值范围:比如 3 – 5,就是从 3 到 5 的所有值都取
  • */数字:比如 */2,就是每 2 分钟或者每 2 天之类的意思

下面看几个例子:

实例 1:每 1 分钟执行一次 myCommand

* * * * * myCommand

实例 2:每小时的第 3 和第 15 分钟执行

3,15 * * * * myCommand

实例 3:在上午 8 点到 11 点的第 3 和第 15 分钟执行

3,15 8-11 * * * myCommand

实例 4:每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行

3,15 8-11 */2  *  * myCommand

实例 5:每周一上午 8 点到 11 点的第 3 和第 15 分钟执行

3,15 8-11 * * 1 myCommand

实例 6:每晚的 21:30 重启 smb

30 21 * * * /etc/init.d/smb restart

实例 7:每月 1、10、22 日的 4 : 45 重启 smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例 8:每周六、周日的 1 : 10 重启 smb

10 1 * * 6,0 /etc/init.d/smb restart

实例 9:每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb

0,30 18-23 * * * /etc/init.d/smb restart

实例 10:每星期六的晚上 11 : 00 pm 重启 smb

0 23 * * 6 /etc/init.d/smb restart

实例 11:每一小时重启 smb

0 */1 * * * /etc/init.d/smb restart

实例 12:晚上 11 点到早上 7 点之间,每隔一小时重启 smb

0 23-7 * * * /etc/init.d/smb restart

实例 13:5小时后 每一小时重启 smb

0 5/1 * * * /etc/init.d/smb restart

错误示例:

如果你想定一个每天两点执行的任务:

0 2 * * * /etc/init.d/smb restart

但不能写成:

* 2 * * * /etc/init.d/smb restart

这种写法表示每天两点开始每分钟执行一次任务, 可能会陷入嵌套重复执行的问题

配置完后 最后启动定时任务

ubuntu下启动、停止与重启cron:

$sudo /etc/init.d/cron start
$sudo /etc/init.d/cron stop
$sudo /etc/init.d/cron restart
$sudo service cron status# 查看当前cron服务运行状态

定时任务备份

可以使用这种方法在$HOME目录中对crontab文件做一备份:

$ crontab -l > $HOME/mycron

问题排查

1. 启动cron 报错:

cron: can't lock /var/run/crond.pid, otherpid may be 4187: Resource temporarily unavailable

解决方案:

依次执行以下三个命令

删除pid 重新加载配置 重启启动cron

rm -rf /var/run/crond.pid 
cron reload 
cron restart

2.任务不执行 日志不打印

指令必须以绝对路径开头 比如:

* */2 * * *  /usr/bin/python3  /root/xxx/xxx.py >>/root/xxx/mylog_$(date +\%Y-\%m-\%d-\%H:\%M:\%S).log 2>&1

「欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章」