cron 作业中的脚本未生成 sql 文件

script in cron job not generating an sql file

我在afbackupdb.sh中有这个脚本:

mysqldump  -u user -ppassword --host IP DBNAME > /var/www/html/af/af_core/af_core_cron/afdb/af.sql

当我 运行 直接在终端中 returns 包含内容的正确 sql 文件。

当 cron 执行时 returns 相同大小的相同文件,但我无法打开它。我收到错误:

System Error.  Code: 123.
The filename, directory name, or volume label syntax is incorrect

上图显示了终端中来自 运行ning 的第一个文件,其余来自我无法打开的 cron 作业

更新:

在crontab -e:

*/5 *  *  *  *   /var/www/html/af/af_core/af_core_cron/affiles/afbackupdb.sh

运行 我的脚本直接 运行ning : head af.sql gets me

-- MySQL dump 10.13  Distrib 5.6.37, for Linux (x86_64)
--
-- Host: IP    Database: dbname
-- ------------------------------------------------------
-- Server version       5.6.37

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

虽然 tail .af.sql 让我:

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2017-10-26 10:40:02
You have new mail in /var/spool/mail/root

你提到了 cron,但你的图像在我看来是 Windows UI。我假设您正试图通过 Samba/CIFS 打开文件?我怀疑问题是权限迭代,无论是在 Windows' ACL 还是 Unix standard ugo 中。右插入符号 (>) 是可能的痛点。在没有更多信息的情况下,我在下面的回答假设这是一个 Unix rootnon-root 用户问题。

右边的插入符号将输出从 stdout 重定向到一个文件 由当前 shell 用户 拥有。因此,即使您使用 -u-p 选项登录 MySQL,shell 仍在写入文件(而不是 MySQL),并且该文件因此归用户 运行 的 UID 所有 shell.

当您登录并手动执行脚本时,您的 user/UID 就是创建文件的人。当 运行 cron 时,我怀疑 shell 用户是 root。您是否通过以下方式编辑 crontab:

$ su -
# crontab -e

$ sudo su -
# crontab -e

$ sudo -s
# crontab -e

$ sudo crontab -e

所有这些最终都会编辑 root 的 crontab,结果执行(和文件所有权)将由 root 用户。

如果这确实是问题所在,请使用您用户的 crontab,或者考虑 运行 您的 cronjob 作为您的用户:

*/5 *  *  *  *   su <username> -c "/var/www/html/af/af_core/af_core_cron/affiles/afbackupdb.sh"