暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

/etc/crontab 和 crontab -e 分析

技术账本 2021-04-20
828


 Linux
下的任务调度分为两类:系统任务调度和用户任务调度。 Linux
系统任务是由cron
(crond
)这个系统服务来控制的,这个系统服务是默认启动的。用户自己设置的计划任务则使用crontab
命令。

系统任务

cat etc/crontab

可以看到如下内容

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
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

前面三行是用来配置crond
任务运行的环境变量

  • 第一行指定了系统要使用哪个shell
  • 第二行指定了系统执行命令的路径
  • 第三行指定了crond
    的任务执行信息将通过电子邮件发送给root
    用户,如果变量的值为空则表示不发送 ①

用户任务

crontab -e

crontab
命令的其他参数如下:

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user'
s crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users'
 crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

使用 crontab -e
定义的文件都保存在 /var/spool/cron
目录中。其文件名与用户名一致。

用户所创建的crontab
文件中, 每一行都代表一项任务,格式如下:

minute hour day month week command

任务执行时间段配置

  • "*"
    代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月

  • "/"
    代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次

  • "-"
    代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次

  • ","
    分散的数字(不一定连续),如1,2,3,4,7,9

分享一个查看时间段配置效果的网站:  https://tool.lu/crontab/

①:cron
中执行的程序有输出,输出的内容会以邮件(轻量级、命令行的SMTP邮件客户端 sendmail
)的形式发给cron的用户, 如果开启了sendmail
, 那里面的小文件会自动移动到 /var/spool/mail/root
(这个root对应不同用户)中去。如果没有开启sendmail
,运行时产生的输出都会发往 /var/spool/clientmqueue
目录。

怎么避免这个目录容量很大? 解决:将输出重定向, >/dev/null 2>&1

文章转载自技术账本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论