【问题标题】:script in cron job not generating an sql filecron作业中的脚本不生成sql文件
【发布时间】:2018-04-07 06:27:55
【问题描述】:

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

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

当我直接在终端中运行它时,它会返回包含内容的正确 sql 文件。

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

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

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

更新:

在 crontab -e 中:

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

直接运行我的脚本然后运行:head af.sql 得到我

-- 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

【问题讨论】:

    标签: php database cron database-backups


    【解决方案1】:

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

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

    当您登录并手动执行脚本时,您的用户/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"
    

    【讨论】:

    • 界面使用的是winscp,终端使用的是putty
    • SELinux?抱歉,Linux 不是那么专业,但服务器操作系统是 centOS。我该怎么办head/tail/view/less
    • 我该怎么办head/tail/view/less
    • *nix 领域的基本命令行实用程序。基本上,您可以在命令行中的 Putty / 中读取文件吗?两个例子:head af.sqltail af.sql
    • 如上句所述,它在运行以下脚本之前将上下文更改为&lt;username&gt;。写入的文件应该归您的用户所有(参见ls -lls -lh 的输出),因此希望是可读的。
    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多