在linux操作系统中, 除了用户即时执行的命令操作以外,我们有时还需要配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。
RHEL6系统中默认已安装了at、crontab软件包,通过atb和crond(进程名)这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、arontab命令进行计划任务设置。
一次调度执行 —at
作用:计划任务主要是做一些周期性的任务,目前主要是用于做定期备份数据
at 只执行一次,执行完后删除
语法格式
at <时间规格>
now +5min
teatime tomorrow (teatime is 16:00)
例如:
[root@xifeng ~]# at now +1min # 一分钟后执行
at> mkdir users
at> <EOT> #Ctrl + D
job 11 at Mon Nov 16 16:24:00 2020
[root@xifeng ~]# ls
users
循环调度执行 cron 用户级
[root@xifeng ~]# yum -y install crontabs #如果软件不存在安装
[root@xifeng ~]# systemctl status crond.service #查看服务状态
crond进程每分钟会处理一次计划任务
[root@xifeng ~]# ps -ef | grep crond
root 860 1 0 11:01 ? 00:00:00 /usr/sbin/crond -n
root 96291 1298 0 16:29 pts/0 00:00:00 grep --color=auto crond
存储位置:
[root@xifeng ~]# cd /var/spool/cron/
管理方式:
crontab -l List the jobs for the current user. //列出当前用户的计划任务
crontab -r Remove all jobs for the current users. //删除当前用户所有的计划任务
crontab -e Edit jobs for the current user. //编辑当前用户的计划任务
管理员可以使用 -u username, 去管理其他用户的计划任务
语法格式:
* * * * * Command
分钟 小时 日 月 周 要执行的命令,最好是绝对路径
时间:
*:每
*/5 :每隔分钟
,:不同的时间段
–: 表示范围
例子:
[root@xifeng ~]# crontab -e #编辑计划任务
每天6:00执行ini
0 6 * * * /home/soso.sh
每天8:40执行
40 8 * * * /home/soso.sh
每周六凌晨4:00执行
0 4 * * 6 /home/soso.sh
每周六凌晨4:05执行
5 4 * * 6 /home/soso.sh
每周六凌晨5:00执行
0 5 * * 6 /home/soso.sh
[root@xifeng ~]# crontab -l #列出计划任务
[root@xifeng ~]# crontab -u jack -e #使用jack用户创建
日志轮转 logrotate(自动切日志)
由于日志每天的累积量会很大,如果不进行分割的话会造成单个日志太大,打开以及查看都很不方便。
日志轮转可以丢弃系统中最旧的日志文件,以节省空间。
logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
vim /etc/logrotate.conf #日志轮转的配置文件
weekly #轮转的周期,一周轮转,单位有年,月,日
rotate 4 #保留4份
create #轮转后创建新文件
dateext #使用日期作为后缀
#compress #日志轮替时,旧的日志进行压缩
include /etc/logrotate.d #包含该目录下的配置文件,会引用该目录下面配置的文件
/var/log/wtmp { #对该日志文件设置轮转的方法
monthly #一月轮转一次
minsize 1M #最小达到1M才轮转,否则就算时间到了也不轮转
create 0664 root utmp #轮转后创建新文件,并设置权限
rotate 2 #保留2份
}
/var/log/btmp {
missingok #丢失不提示
monthly
create 0600 root utmp
rotate 1
}
[root@xifeng ~]# /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
[root@xifeng ~]# ls /var/log/yum*
/var/log/yum.log /var/log/yum.log-20191110