前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux定时任务crontab详解

linux定时任务crontab详解

作者头像
章鱼喵
发布2019-03-06 11:30:20
5.5K0
发布2019-03-06 11:30:20
举报
文章被收录于专栏:codingcoding

image.png

访问控制

  • 白名单 若存在/etc/cron.allow,只有该文件内的用户才能使用crontab
  • 黑名单 若存在/etc/deny,该文件内的用户不能使用crontab
  • 优先级 /etc/cron.allow > /etc/cron.deny

常用选项

  • -e: 编辑任务
  • -l: 显示所有任务
  • -r: 删除当前用户的所有crontab任务

服务管理

代码语言:javascript
复制
$ systemctl status crond # 查看服务状态
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-02-18 01:32:37 CST; 13h ago
 Main PID: 1598 (crond)
   CGroup: /system.slice/crond.service
           └─1598 /usr/sbin/crond -n

$ sudo systemctl start crond # 启动服务
$ sudo systemctl stop crond # 停止服务

根据cron的日志实时查看执行情况

代码语言:javascript
复制
$ sudo tail -f /var/log/cron

时间选项说明

五个*号

crontab 由 五个 * 定义任务的执行时间,具体含义为:

*号

含义

范围

第1个

1小时中的第几分钟

0-59

第2个

1天中的第几小时

0-23

第3个

1个月中的第几天

1-31

第4个

1年中的第几月

1-12

第5个

1周中的星期几

0-7(0和7都代表星期日)

特殊符号

    • 表示任何时间,如第1个 * 表示1小时中的每分钟都执行一次
  • , 表示不连续时间,如0 8,12,16 * * *表示每天的8点0分,12点0分,16点0分执行一次命令
    • 表示连续的时间范围,如0 5 * * 1-6,表示周一至周六的凌晨5点0分执行命令

具体示例

  • 45 22 * * * 22点45分执行
  • 0 17 * * 1 每周一的17点0分执行
  • 0 5 1,15 * * 每月1号和15号的凌晨5点0分执行
  • 40 4 * * 1-5 每周一至周五的凌晨4点40分执行

注意:星期几与几号不要同时出现

0 0 1,15 * 1 表示的是:每月1号和15号的0点0分执行,每周一的0点0分执行。两者是或的关系,但不要有这种写法,很容易产生歧义

系统的定时任务

crontab -e表示每个用户以自己的身份执行自己的定时任务。除此之外,还可以通过/etc/crontab这个配置文件指定任务

用系统配置的方式执行定时任务,有两种方式:

  • 第一种:将需要定时执行的脚本放到 `/etc/cron.{daily,weekly,monthly}/目录中
代码语言:javascript
复制
$ ls /etc | grep cron
anacrontab
cron.d
cron.daily
cron.deny
cron.hourly
cron.monthly
crontab
cron.weekly
代码语言:javascript
复制
$ sudo cat /etc/anacrontab # 用于管理
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1   5   cron.daily      nice run-parts /etc/cron.daily
7   25  cron.weekly     nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly        nice run-parts /etc/cron.monthly
  • 第二种:修改/etc/crontab配置文件
代码语言:javascript
复制
$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin # 由此可知,crontab是有自己的环境变量的,因此在crontab中要用绝对路径,shell中的PATH与crontab的PATH不一定相同
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

实际应用中,一般直接使用crontab -e的方式来处理更加常见

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.02.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 访问控制
  • 常用选项
  • 服务管理
  • 时间选项说明
    • 五个*号
      • 特殊符号
      • 具体示例
      • 系统的定时任务
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档