容易忽略的小问题:定时任务crontab设置执行脚本任务不生效

作者 by 小楼 / 2022-03-24 / 暂无评论 / 134 个足迹

昨天上班一到现场发现一个系统服务挂了,检查发现是根目录被日志写满导致的,清理完日志后,就顺手写了个监测存储占用自动删除日志的脚本 加到定时任务里面去了,脚本如下:

#!/bin/bash
#监控根目录空间占用超过90%后,自动删除data-log目录下前天到10天前的日志

#获取当前根目录存储占用
df=`df -h|grep 'centos-root'|awk '{print $5}'|grep -Eo [0-9]+`

#获取当前时间戳
d=`date '+%s'`

if [ $df -gt 90  ]
then
  for i in {2..10}
  do
    find /data-logs/archive -name *`date -d @$(($d-86400*$i)) '+%Y-%m-%d'`*.log.gz|xargs rm -f
  done
  echo "!警告:`date '+%Y-%m-%d %H:%M:%S'` 删除日志" >> jilu.txt
else
    echo "`date '+%Y-%m-%d %H:%M:%S'`  根目录占用$df%" >> jilu.txt
fi

今天过去发现定时任务没生效,把脚本和定时任务的命令来回检查了好多遍,测试了好久才发现是因为输出记录到jilu.txt

  echo "!警告:`date '+%Y-%m-%d %H:%M:%S'` 删除日志" >> jilu.txt

这里用的是相对路径,这样是不对的 必须用绝对路径,改为绝对路径后就正常了。

#!/bin/bash
#监控根目录空间占用超过90%后,自动删除data-log目录下前天到10天前的日志

#获取当前根目录存储占用
df=`df -h|grep 'centos-root'|awk '{print $5}'|grep -Eo [0-9]+`

#获取当前时间戳
d=`date '+%s'`

if [ $df -gt 90  ]
then
  for i in {2..10}
  do
    find /data-logs/archive -name *`date -d @$(($d-86400*$i)) '+%Y-%m-%d'`*.log.gz|xargs rm -f
  done
  echo "!警告:`date '+%Y-%m-%d %H:%M:%S'` 删除日志" >> /data-logs/jilu.txt
else
    echo "`date '+%Y-%m-%d %H:%M:%S'`  根目录占用$df%" >> /data-logs/jilu.txt
fi

独特见解