【问题标题】:Date time format in UNIX crontabUNIX crontab 中的日期时间格式
【发布时间】:2013-05-17 12:05:07
【问题描述】:

我每 6 小时运行一次 cron 来备份我的数据库。 我希望文件名包含创建日期和时间,格式如下:

mysqlbackup_22/5/2013_15:45.sql.gz

这是我运行的命令:

date=`date -d`; mysqldump -uusername -ppassword dbname | gzip > /path/to/dir/mysqlbackup_$date.sql.gz

我需要将date -d 更改为什么?

【问题讨论】:

  • 使用这个:date "+%Y_%H:%M"
  • 应该是date=`date +%Y_%H:%M`?
  • 是的,但带有引号。还有date=$(date "+%Y_%H:%M")。考虑到分号对于名称来说不是很 UNIX 友好。
  • 给出错误:/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
  • 用代码更新你的问题,这样我们就可以看到哪里出了问题。

标签: unix datetime cron crontab


【解决方案1】:

如果您在 crontab 中使用像 date +"%d-%m-%Y_%H:%M" 这样的日期格式,您可能需要使用反斜杠转义 % 字符,例如:date +"\%d-\%m-\%Y_\%H:\%M"

许多 cron 专门处理 %,将它们替换为换行符并将以下文本作为标准输入发送到它之前的命令。详情请见man 5 crontab

【讨论】:

  • 谢谢!我尝试了很多事情,但没有注意到这一点。我从旧版本的 CentOS 转移到新版本,我猜新版本需要 % 字符上的转义。谢谢!
【解决方案2】:

date 上的 + 运算符让您可以灵活地以您想要的任何方式/格式指定日期,只要有一个您想要的变量。在这种情况下,来自man date

   %d     day of month (e.g, 01)
   ...
   %H     hour (00..23)
   ...
   %m     month (01..12)
   %M     minute (00..59)
   ...
   %Y     year

所以,你有:

date +"%d/%m/%Y_%H:%M"

或者,应用于您的命令:

date=`date +"%d-%m-%Y_%H:%M"`; mysqldump -uusername -ppassword dbname | gzip > /path/to/dir/mysqlbackup_$date.sql.gz

请注意,我将文件名中的正斜杠 (/) 更改为破折号 (-),因为您不能在 unix/linux 文件名中使用正斜杠。

【讨论】:

  • 只要所有这些目录都已经存在,在名称中使用 / 就可以了。您可以通过运行 $(mkdir -p $(dirname $date)) 来创建它们
  • 我相信斜杠是文件名的一部分,而不是路径的一部分。只有 OP 可以确认..... :-/
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2017-09-19
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多