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

  

posted @ 2022-07-28 16:04  LB_运维技术  阅读(84)  评论(0编辑  收藏  举报