Debian中为SQL备份文件添加时间戳失败问题排查
问题原因与修复方案
核心问题
你使用的date +%F.%s中,%F是GNU date的扩展格式(等价于%Y-%m-%d),但Debian默认的系统shell是dash(POSIX兼容shell),在POSIX模式下不支持%F这个非标准格式,导致date命令执行失败,生成了无效的文件名,最终备份脚本无法正常生成文件。
修复方案
方案1:使用POSIX兼容的日期格式
把%F替换为%Y-%m-%d,确保所有shell都能识别:
cat /root/dblist.txt | while read i; do /usr/sbin/plesk db dump "$i" > /root/mysql_dumps_all/"$i".$(date +%Y-%m-%d.%s).sql; done
方案2:指定用Bash运行脚本
显式使用Bash执行脚本(Bash支持GNU date的扩展格式),同时推荐用$(command)代替反引号(可读性更强,不易出现嵌套解析问题):
#!/bin/bash cat /root/dblist.txt | while read i; do /usr/sbin/plesk db dump "$i" > /root/mysql_dumps_all/"$i".$(date +%F.%s).sql; done
优化版脚本(更健壮)
避免cat管道的冗余,直接用while循环读取文件,同时添加-r参数防止反斜杠被转义,并用双引号包裹完整文件名(适配含特殊字符的数据库名):
#!/bin/bash while read -r db_name; do /usr/sbin/plesk db dump "$db_name" > "/root/mysql_dumps_all/${db_name}.$(date +%F.%s).sql" done < /root/dblist.txt
内容的提问来源于stack exchange,提问作者scratch
相关产品推荐
相关产品推荐

