linux之定时任务
定时任务
- 定时执行的命令或脚本任务
1.系统定时任务配置
# 系统定时任务需要root权限
# 配置文件: /etc/crontab
# 语法结构: * * * * * root cmd 或 cmd.sh
# * 的解释
* 分 0 - 59 01或者写1表示1分钟 0表示整点
* 时 0 - 23 00或者写0 表示凌晨12点
* 日 1 - 31
* 月 1 - 12 1-12月份
* 周 0 - 6 0或者7表示星期天
#特殊符号表示时间:
* 表示每的意思 如果是五颗星表示每分钟都要执行一次定时任务
/ 表示间隔的意思 */5 或 */05 表示间隔5分钟执行一次
- 表示区间 7-11 表示上午7点到上午的11点
, 表示间隔 7-11,13-15 上午7点到11点和下午的1点到3点执行
#每5分钟执行一个echo hello world >>hello.txt
*/5 * * * * root echo hello world >>hello.txt
#每小时的第5分钟执行一次定时任务
05 * * * * root echo hello world >>hello.txt
#每分钟执行一次定时任务
* * * * * root echo hello world >>hello.txt
#上午的7-11点执行任务
* 7-11 * * * root echo hello world >>hello.txt #7-11点每分钟都执行
00 7-11 * * * root echo hello world >>hello.txt #7-11点整点执行
#凌晨12点执行一次命令
00 00 * * * root echo hello world >>hello.txt #每天晚上十二点执行一次
#定时任务不识别% 需要加\ 或者将命令写入到脚本中
#将脚本写入到定时任务
* * * * * root sh /server/scripts/cmd.sh
#定时任务的日志文件
centos 、kylin: /var/log/cron
ubuntu : /var/log/syslog
2.用户定时任务配置
# 配置文件:/var/spool/cron/root 默认不存在,需要手动vim
# 配置用户定时任务有两种方法:
#用命令
crontab -e 直接编辑的是/var/spool/cron/root
#编辑配置文件
vim /var/spool/cron/root
#用户的定时任务默认识别的PATH变量只有/usr/bin和/bin路径 需要重新配置PATH变量
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
#crontab -l 查看定时任务列表
[root@localhost ~]# crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
* * * * * echo hello world >hello.txt
#定时任务定向到日志文件 或 空
* * * * * echo hello world &>>cron.log #错误的正常的都输入
* * * * * echo hello world &>/dev/null #丢给黑洞
#用户定时任务 详细报错信息查看 /var/spool/mail
#使用centos,如果关闭了邮件服务,每执行一次定时任务,会自动生成一个小文件,小文件会占用inode号码
#/var/spool/postfix/maildrop
3.定时任务注意
1.避免一些不必要的输出 类似tar -zcf 去掉v 类似打包进入相对路径
2.多条命令使用脚本
3.直接写到定时任务配置文件中不识别% 需要加\ 或者写入脚本。
4.用户定时任务识别的路径只有/usr/bin和/bin目录 需要重新定义PATH变量
4.定时任务
1.以每天为时间+ip地址+主机名称在/opt/创建目录
2.打包/etc/passwd /etc/hosts文件名称为etc.tar.gz 放到已经创建好的目录中
3.查找/opt/目录下所有7天前被修改过的文件删除 (模拟环境使用循环生成需要的文件)
#!/bin/bash
for i in {1..9}
do
#修改系统时间
date -s 2024100${i} &>/dev/null
#创建目录
dir_date=`date +%F`
#获取主机IP
ip=`hostname -I |awk '{print $1}'`
#获取主机名称
hostname=`hostname`
#在/opt/下创建目录
dir="/opt/${dir_date}-${ip}-${hostname}"
mkdir -p "$dir"
#echo $dir
#创建文件
touch ${dir}/{1..10}.txt
#打包 passwd hosts
tar zcfP ${dir}/etc.tar.gz /etc/passwd /etc/hosts
done
ntpdate ntp2.aliyun.com &>/dev/null
#查找7天以上的文件和目录并删除
find /opt/* -type f -o -type d -mtime +7 |xargs -i rm -rf {}
Never try,never know