【问题标题】:Variable date not working in linux cron可变日期在linux cron中不起作用
【发布时间】:2015-04-17 15:08:06
【问题描述】:

我遇到一个问题,在进行广泛的谷歌搜索时找不到任何信息。

我有一个通过 crontab 运行的 linux cron,在我尝试将可变日期添加到文件标题之前,它运行良好。但是..当我在 cron 之外运行相同的命令时,只是从命令行,它工作正常。此外,如果我取出日期部分,cron 确实可以工作。

有效的命令行代码:

sudo mysqldump -h mysql.url.com  -u user -pPassword intravet sites | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz

有效的 Cron:

15 2 * * * root mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database.sql.gz

无法正常工作的 Cron:

15 2 * * * root mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database_`date '+%m-%d-%Y'`.sql.gz

我不明白为什么我不能在 cron 中使用日期函数? 我发现的一切都说我可以,但实际上我做不到。

服务器详情: Ubuntu 12.04.5

感谢您提供任何见解。

【问题讨论】:

  • 来自手册页:A "%" character in the command, unless escaped with a backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

标签: linux cron


【解决方案1】:

你只需要使用转义%符号

* * * * * touch /tmp/foo_`date '+\%m-\%d-\%Y'`.txt

结果:

[root@linux tmp]# ls -l /tmp/foo_*
-rw-r--r-- 1 root root 0 Apr 18 02:17 /tmp/foo_04-18-2015.txt

【讨论】:

  • 这两项工作都没有,我做了一些研究,发现默认情况下不能从 cron 选项卡访问 shell。我仍然没有解决这个问题,但我相信这是原因。
  • 你的意思是 shell 不能从 crontab 访问? cron 使用默认的SHELL=/bin/bash 变量
  • 好的..所以我的shell路径不正确,然后添加反斜杠来转义解决了我的问题!非常感谢你们..
  • 如果您发现答案是完整的,请点击Answer 获取积分
【解决方案2】:

尝试用$() 替换反引号并转义您的%s,例如:

15 2 * * * root mysqldump -h mysql.url.com -u user -pPassword intravet sites | gzip > /mnt/disk2/database_$(date '+\%m-\%d-\%Y').sql.gz

我只提到删除反引号是因为您在以后的编码工作中最终会遇到各种转义问题。坚持使用$() 进行命令替换。

【讨论】:

    猜你喜欢
    • 2013-09-11
    • 2020-07-23
    • 2018-11-13
    • 2015-01-05
    • 2016-11-22
    • 2016-01-23
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多