crontab 执行脚本tar打包文件为空

本文介绍了一个用于自动备份MongoDB数据库并删除旧备份的Shell脚本。该脚本在手动运行时正常工作,但在通过Cron定时任务调用时出现问题:备份的gz文件为空。经过排查,最终解决了此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本如下
#vi /usr/sbin/bakmongo.sh

#!/bin/sh
# Name:bakmongo.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/data/dbbak
time=`date +%Y%m%d%H`

usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d db1 -o $backupdir/db1_$time
tar -zcvf $backupdir/db1_$time.tar.gz $backupdir/db1_$time

rm -rf $backupdir/db1_$time

find $backupdir -name "db1_*.tar.gz" -type f -mtime +5 -exec rm -rf {} \; > /dev/null 2>&1


手动运行,没任何问题
cron调用发现gz包死活为空,然后排除百度各种说环境变量问题,全路径问题,还是不行
关键是日志没任何错误
最后看到一个高人说是无法输出 ,改成如下
usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d db1 -o $backupdir/db1_$time >/dev/null 2>&1

tar -zcvf $backupdir/db1_$time.tar.gz $backupdir/db1_$time >/dev/null 2>&1
搞定

去掉tar v参数也是不行
<think>好的,我现在需要帮助用户解决在Linux中根据日期打包文件的问题,使用tar和gzip。首先,我应该回忆一下tar命令的基本用法以及如何结合日期参数。 用户提到了按日期打包,可能需要用到find命令来筛选特定日期的文件,然后再用tar打包。记得tar可以结合--newer-mtime选项来指定日期。或者,用户可能想将打包后的文件名包含当前日期,这样便于管理。 接下来,需要确认如何生成当前日期的字符串,通常可以用date命令,比如date +%Y%m%d来得到类似20231023的格式。然后,将日期变量嵌入到打包命令中,生成带有日期的文件名。 另外,用户提到了gzip压缩,所以应该使用tar的-z选项来调用gzip压缩,或者在打包后用gzip单独压缩。不过通常tar可以直接处理,使用-z参数一步完成打包和压缩。 还需要考虑如何查找指定日期的文件,比如使用find命令的-mtime选项,或者结合-mmin来按分钟查找。不过用户的需求是按日期,可能需要更精确的时间范围,比如某一天的文件。 例如,使用find /path -type f -newermt "2023-10-22" ! -newermt "2023-10-23"来找到22号当天的文件,然后通过-exec tar将其添加到压缩包中。不过这样可能需要处理多个文件,或者用xargs传递参数给tar。 另外,要注意tar命令的语法是否正确,比如-cvf创建归档文件,-z进行gzip压缩,正确的参数顺序。同时,确保路径正确,避免打包错误文件或者目录。 可能还需要举几个例子,比如基本打包并压缩带有日期的文件名,或者结合find命令按日期筛选文件后再打包。这样用户可以根据具体情况选择合适的方法。 最后,检查是否有相关的引用内容需要提及,比如tar打包和压缩结合使用,引用提供的资料中的信息,确保回答的准确性。</think>### Linux按日期打包文件操作指南 #### 1. 基础命令格式(带日期参数) 使用`date`命令生成日期变量,结合`tar`和`gzip`实现带时间戳的打包压缩: ```bash tar -zcvf backup_$(date +%Y%m%d).tar.gz /path/to/files ``` - `+%Y%m%d`生成日期格式如`20231023`,`-z`参数自动调用gzip压缩[^3] - 最终生成`backup_20231023.tar.gz`文件 #### 2. 按文件修改时间筛选 使用`find`命令定位特定日期文件打包: ```bash find /target_path -type f -mtime -1 -exec tar -rf daily_backup.tar {} + gzip daily_backup.tar ``` - `-mtime -1`筛选24小时内修改过的文件 - `-exec`将找到的文件追加到tar包[^1] #### 3. 精确时间范围打包 定位指定日期区间文件(如2023-10-20至2023-10-21): ```bash tar -zcvf range_backup.tar.gz --newer-mtime="2023-10-20" ! --newer-mtime="2023-10-22" /path ``` #### 4. 自动化脚本示例 创建定时打包脚本`/usr/local/bin/auto_pack.sh`: ```bash #!/bin/bash BACKUP_DIR="/data" LOG_FILE="/var/log/backup.log" TIMESTAMP=$(date +%Y%m%d_%H%M%S) tar -zcvf ${BACKUP_DIR}/backup_${TIMESTAMP}.tar.gz /home/wwwroot 2>> ${LOG_FILE} find ${BACKUP_DIR} -name "*.tar.gz" -mtime +7 -delete ``` 通过`crontab -e`添加每日执行计划: ```bash 0 2 * * * /usr/local/bin/auto_pack.sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值