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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




