是什么导致了“查找...时出现意外的 EOF 错误”错误?

是什么导致了“查找...时出现意外的 EOF 错误”错误?

我在运行 cron 作业以导出 Godaddy 共享托管 Cpanel 帐户上的所有数据库时遇到问题。但我很难找到下面命令中的语法错误。

相同的命令正在我的 AWS Ec2 上运行。

mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/'$(date +"%Y-%m-%d")-$dbname'.sql;done

邮件收到错误:

/bin/bash: -c: line 0: unexpected EOF while looking for matching `''
/bin/bash: -c: line 1: syntax error: unexpected end of file

答案1

Crontab 命令会将所有未转义的出现%替换为换行符。这是来自手册crontab(5)在我的系统上:

命令字段(该行的其余部分)是要运行的命令。该行的整个命令部分(直到换行符或字符)将由crontab 变量 中指定的 shell%执行。/bin/shSHELL命令中的百分号 ( %) 除非用反斜杠 ( \) 转义,否则将更改为换行符,并且第一个之后的所有数据%都将作为标准输入发送到命令。

你的 crontab 命令应该是这样的

mysql -N -ubackup -pt -e 'show databases' | while read dbname; do mysqldump -ubackup -p123 --complete-insert -N "$dbname" > /home/test/sqlbackups/"$(date +"\%Y-\%m-\%d")-$dbname".sql;done

在这里,我还更正了$(...)之前单引号引用的内容(因此未由 shell 扩展)。

一般来说,最好将所有重要的 cron 作业放入自己的脚本中,然后安排它们。这样您就可以更好地控制此类事情,并且还可以为任何特定工作选择正确的口译员(例如kshbash代替sh)。它还使 cron 守护程序发送给您的电子邮件中的任何主题行更具可读性。

相关内容