Linux crontab 命令
定时任务(cronie 软件名称) crond (服务名称 进程名称) # crontab -l #查看定时任务脚本 (1)检查进程: ps -ef 、ps aux(更加详细 cpu 内存使用率) # ps -ef | grep crond | grep -v grep | wc -l # ps -aux | grep -c '[c]rond' (2)检查服务状态 # systemctl is-active crond.service # systemctl is-enabled crond.service (3)使用定时任务 * * * * * 命令 (分 时 日 月 周)命令 例: 每天早上8:30去上班开车 30 08 * * * CMD 每周日早上9:30去上班开车 30 09 * * * 0 CMD 每天晚上12点准时回家开车 00 00 * * * CMD * 00 * * * CMD (4)定时任务常见特殊符号 * :每 / :隔 #*/10 * * * * CMD (每隔10分钟=每10分钟) - :范围 #* 08-21 * * * CMD ,: #00 08,09,10 * * 1-5 CMD 例如: * * * * * 命令 #每分钟 */1 * * * * 命令 #每隔1分钟 01 * * * * 命令 #每小时的第一分钟 例如: [root@libin3 ~]# crontab -e */1 * * * * date >>/tmp/time.log #写一个计时任务,date每隔1分钟输出到/tmp/time.log # tail -f /var/log/cron #打开一个新窗口查看cron日志的变化 # tail -f /tmp/time.log #打开一个新窗口查看time.log的变化 每天晚上12点打包备份/etc/目录到/tmp下面 (要求每天的压缩包不能重复) 第一步 :命令加脚本 # tar zcvf /tmp/etc.tar.gz /etc/ #测试打包/etc/的命令 # mkdir -p /libin/scripts/ #创建脚本路径 # vim /libin/scripts/bak.sh #写脚本 #!/bin/bash tar zcf /tmp/etc-$(date +%F).tar.gz /etc/ # sh /libin/scripts/bak.sh #测试脚本是否正确 第二步:写入定时任务 可以先写为每分钟执行 crontab -e # backup etc dir by /tmp/ at 12 * * * * * sh /libin/scripts/bak.sh 第三步:验证定时任务 # tail -f /var/log/cron #查看定时任务的变化 # ll /tmp/etc- #查看备份的变化 第四步:修改定时任务为每天晚上12点 00 00 * * * sh /libin/scripts/bak.sh ==============================================注意 # date +%Y%m%d_%w #带%在定时任务中有特殊含义,否则只会执行三次;建议使用脚本放入定时任务,或加上\ # date +\%Y\%m\%d_\%w 关于 出现/var/spool/mail/root提示优化: 1、定时任务 定向到空或追加到文件 >/dev/null 2>&1 #定向到空>/dev/nul,或追加到文件 2>&1 >/dev/null 2>&1 == 1>/dev/null 2>/dev/null == &>/dev/null #1代表正确的信息 2代表错误的信息,同时记录错误或者正确的信息 >>/tmp/message.log 2>&1 #追加到文件 例如:: */1 * * * * date >>/tmp/time.log 2>&1 #追加到文件的,可以定向到文件,可以把错误的信息记录下来 00 00 * * * sh /libin/scripts/bak.sh >/dev/nul 2>&1 #脚本类或者命令类,可以定向到黑洞 特殊字符设备 /dev/null :黑洞 /dev/zero :白洞 /dev/urandom :随机 1、关闭邮件服务 没有发出去的临时邮件 存放起来 ll /var/spool/postfix/maildrop/ 积累大量小文件 inode可能用光 2、邮件服务开启 不断收到 you have new mail /var/spool/mail/root 定时任务案例2: 1、每分钟显示网卡ip地址(ip或ifconfig)和当前系统时间追加到 /tmp/time.log (1)# ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}' (2)# vim /libin/scripts/ip.sh #!/bin/bash ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}' (3)# sh /libin/scripts/ip.sh >>/tmp/time.log (4)# crontab -e * * * * * sh /libin/scripts/ip.sh >>/tmp/time.log 2>&1 #sh -x /libin/scripts/ip.sh >>/tmp/time.log 2>&1,可以先调式脚本 (5)# tail -f /var/log/cron (6)# tail -f /tmp/time.log #/libin/scripts/ip.sh:行2: ip: 未找到命令 注:定时任务中 环境变量问题PATH 在定时任务中 运行脚本 只认识 /usr/bin 和 /bin 这两个路径里面的命令 正确写法: (1)/usr/sbin/ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}' (2)#!/bin/bash . /etc/profile ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}' # sh -x /libin/scripts/ip.sh #调试脚本,-x:显示脚本的执行过程;带+的是执行的命令和过程,不带+号的是显示到屏幕的内容,+号越多优先执行 定时任务案例3: (1)每天晚上12点 打包备份 /etc/rc.local /etc/fstab /var/spool/cron 备份到backup (2)要求备份到/backup/ip地址命名目录中 /backup/192.168.124.134 /backup/192.168.124.134/conf-2022-03-19_周几.tar.gz (3)删除/backup 7天之前的备份 但是保留每周一的备份 ===============#变量名称=变量内容 [root@libin3 ~]# ip=192.168.124.134 [root@libin3 ~]# echo $ip [root@libin3 ~]# echo $ip $ip $ip 192.168.124.134 192.168.124.134 192.168.124.134 [root@libin3 ~]# touch $ip.{01..10} ================# [root@libin3 ~]# hostname -I 192.168.124.134 192.168.122.1 [root@libin3 ~]# ip=`hostname -I` [root@libin3 ~]# echo $ip.txt 192.168.124.134 192.168.122.1 .txt [root@libin3 ~]# ip=`hostname -I | awk '{print $1}'` [root@libin3 ~]# echo $ip.txt 192.168.124.134.txt 第一步:变量与ip时间 变量 一次定义 多次使用 vim /libin//scripts/bak-conf.sh #!/bin/bash ip=`hostname -I | awk '{print $1}'` date=`date +%F_%T` echo $ip $date 第二步:打包备份 mkdir -p /backup/$ip cd / && \ #\:撬棍,转义,换行 tar zcf /backup/$ip/conf-$date.tar.gz etc/rc.local \ etc/fstab var/spool/cron etc/hosts etc/profile 第三步:删除旧备份,保留每周一备份 mkdir /backup/192.168.124.134/ # touch /backup/192.168.124.134/etc-2018-12-23_{1..6}.tar.gz # find /backup/192.168.124.134/ -type f -name "*.tar.gz" ! -name "*_1.tar.gz" # find /backup/192.168.124.134/ -type f -name "*.tar.gz" ! -name "*_1.tar.gz" | xargs rm -f #! -name :取反 ================================================ 在crontab定时一下 tar zcvf /文件存放路径/webpage.tar.gz / 页面路径/ mysqldump -uroot -p(p后紧跟密码) 库名字 >/备份存放路径/data.sql chmod 777 你的脚本 然后crontab -e 每天 凌晨一点备份 里面就写 * 1 * * * /你的脚本路径/backup.sh