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 root 与 non-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"
我在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 root 与 non-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"