cron用来管理周期性重复执行的任务调度,非常适合日常系统维护工作。计划任务分为系统的计划任务和用户自定义的计划任务。
- cron服务每分钟都检查/etc/crontab文件、/etc/cron.d目录和/var/spool/cron目录中的变化。
- /var/spool/cron目录下的任务需要通过crontab -e 命令来创建;
/etc/cron.d目录下的时任务配置文件,不是可执行文件;
使用cron安排周期性任务——周期性创建用户实例
- (一)使用配置文件/etc/crontab定义系统级周期性任务。
- (二)在/etc/cron.d目录中定义个别的周期性任务
- (三)使用crontab命令为普通用户定制任务调度
- (四)控制对cron的访问
- (五)周期性创建用户实例
(一)使用配置文件/etc/crontab定义系统级周期性任务。
cron主要使用配置文件/etc/crontab来管理系统级任务调度。
# cat /etc/crontab
SHELL=/bin/bash #默认的Shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin #运行命令的默认路径
MAILTO=root #执行结果以邮件形式发送到此处指定的用户
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) #分钟(0-59)
# | .------------- hour (0 - 23) #小时(0-23)
# | | .---------- day of month (1 - 31) #日期(1-31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... #月份(1--12)
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat #星期(0-7)
# | | | | |
# * * * * * user-name command to be executed
注意:
- 星号“ * ”为通配符,表示取值范围的任意值;
连字符“ - ”,表示数值区间;
逗号“ , ”,用于多个数值列表;
正斜线“ / ”,用来指定间隔频率。在某个范围后面加一个“/整数值”表示在该范围内每跳过该整数值执行一次任务。例如“1-12/3”,用于月份表示每三个月。
user-name 是执行任务命令的用户身份,例如root用户
command to be executed:要执行任务命令的路径
Linux系统中预设有许多例行任务,cron服务默认开机自动启动。通常cron服务的监测周期是1分钟,它每分钟会读取配置文件/etc/crontab的内容,根据其中定义执行任务。
(二)在/etc/cron.d目录中定义个别的周期性任务
/etc/crontab配置文件适合全局性的计划任务,如果要定制更了灵活、更具个性的计划任务,则可以考虑在/etc/cron.d 目录中添加自己的配置文件,格式同/etc/crontab,文件名可以自定义。
与/etc/crontab一样,只是已经定义了一个调度任务,具体功能是到整点一分,系统就以root身份执行run-parts脚本来运行/etc/cron.hourly目录中的调度任务脚本。系统提供了/etc/cron.daily、/etc/cron.weekly、/etc/cron.mouthly目录,分别用于每日、每周、每月的任务调度。
(三)使用crontab命令为普通用户定制任务调度
上述两种配置是系统级的,只有root用户能够通过/etc/crontab文件和/etc/cron.d目录来定制cron任务调度。普通用户只能使用crontab命令创建和维护自己的cron配置文件。
- 指定用户
crontab -u 用户名 #省略则是默认当前用户
- 编辑用户cron调度文件
crontab -e
- 显示cron调度文件内容
crontab -l
crontab命令生成的cron调度文件位于/var/spool/cron目录,以用户账户命名。
# cd /var/spool/cron
# ls
root
(四)控制对cron的访问
可以通过/etc/cron.allow和/etc/cron.deny文件来限制用户对cron服务的使用。这两个控制文件的格式都是每行一个用户,不许空格。
如果cron.allow文件存在,只有其中列出的用户才被允许使用cron,并且忽略cron.deny文件的设置;如果cron.allow文件不存在,所有在cron.deny中列出的用户都被禁止使用cron。 redhat9.0中cron.allow文件不存在,只有cron.deny文件且里面是空的。root用户不受这两个控制文件的制约,总是可以使用cron。
(五)周期性创建用户实例
##############################################################################
#DESCRIPTION:创建用户,用作周期性执行测试
#NOTES:
#1、定义变量,申明用户名
#2、增加用户命令,并将报错结果丢进一个临时文件
#3、为用户设置密码,并将输出结果丢进垃圾桶
#4、记录当下生成用户的时间
#AUTHOR:Ley
#CREATED: 2024/3/27
###############################################################################
#!/bin/bash
username=ly
sudo useradd $username 2>> /tmp/err.log
echo 1234567 | passwd --stdin $username &> /dev/null
#echo $(date) >> /tmp/err.log
date 1>> /tmp/err.log
~
# crontab -e
* * * * /root/uad.sh #每分钟执行一次,当前用户执行。
crontab: installing new crontab
查看临时文件,看报错信息和时间,每分钟创建一次用户