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

一、Crontab 命令安装教程

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

1
crontab -l

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

如果没安装,进行安装:

CentOS:

1
2
yum install vixie-cron
yum install crontabs

Ubuntu:

1
apt-get install cron

二、Crontab 命令使用教程

命令格式:

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

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

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

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

1
分 时 日 月 星期 要运行的命令
  • 第 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

1
* * * * * myCommand

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

1
3,15 * * * * myCommand

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

1
3,15 8-11 * * * myCommand

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

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

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

1
3,15 8-11 * * 1 myCommand

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

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

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

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

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

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

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

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

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

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

实例 11:每一小时重启 smb

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

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

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

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

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

1
2
3
4
$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文件做一备份:

1
$ crontab -l > $HOME/mycron

问题排查

1. 启动cron 报错:

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

解决方案:

依次执行以下三个命令

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

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

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

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

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

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%