![Ubuntu 12.04 cron 未执行](https://linux22.com/image/969087/Ubuntu%2012.04%20cron%20%E6%9C%AA%E6%89%A7%E8%A1%8C.png)
这是我遇到的问题...
我有一个网络服务器,流量很大。我想在另一台服务器上保留它的近乎实时的备份。该备份服务器将处理日志文件、访客跟踪文件、数据库备份等。因此,我通过备份服务器上的 cron 在不同时间执行了几个命令(crontab -e)。无论出于什么原因,我只收到了一些执行的邮件,所以我今天添加了日志记录。
我认为用户 cron 下的任何命令都没有执行。(根 cron 下也没有执行 - sudo crontab -e。)下面是一个从 CLI 运行良好但从 cron 运行不正常的命令示例。目录 /media/eagle805 是挂载主服务器 (eagle805) 的备份服务器上的目录。该目录归拥有 cron 的用户所有。
*/1 * * * * mv /media/eagle805/ver1/php/VisitorTracking/data/raw/*.raw /var/www/ver1/php/VisitorTracking/data/raw/. >> /var/www/backups/visitor_tracking_file_move_$(date +%Y-%m-%d).log 2>&1
当我从 CLI 运行此命令时,它工作正常。日志文件已创建(且为空)。我想要从主服务器移动到备份服务器的所有文件都已移动。但它不是从 cron 运行的。我收到此错误(通过电子邮件):
/bin/sh: 1:语法错误:文件结尾意外(预期“)”)
谁能告诉我我错过了什么?
谢谢
答案1
您应该使用反斜杠来转义百分号:
*/1 * * * * mv /media/eagle805/ver1/php/VisitorTracking/data/raw/*.raw /var/www/ver1/php/VisitorTracking/data/raw/. >> /var/www/backups/visitor_tracking_file_move_$(date +\%Y-\%m-\%d).log 2>&1
参考: man 5 crontab
中间部分内容如下:
命令中的百分号(%),除非使用反斜杠(\)进行转义,否则将被更改为换行符,并且第一个 % 之后的所有数据都将作为标准输入发送到命令。