【问题标题】:What is wrong with this bash script (cron + mysql)这个 bash 脚本有什么问题(cron + mysql)
【发布时间】:2018-07-25 06:18:43
【问题描述】:

我正在使用 cron 使用的 bash 脚本 (sync.sh),它应该将文件同步到 MySQL 数据库。它的工作原理是从自动上传的位置复制文件,通过调用 SQL 脚本来解析它,该脚本调用其他 MySQL 内部存储的脚本,最后通过电子邮件将报告文本文件作为附件发送。

但是,似乎有些东西不起作用,因为 MySQL 数据库没有任何反应。执行所有其他命令(第一行和最后一行:复制初始文件和电子邮件发送)。 单独运行时的 MySQL 命令可以完美运行。 服务器是 Ubuntu 16.04。 Cron 作业以 root 用户身份运行,脚本是 root 用户的 crontab 的一部分。

这是脚本:

#!/bin/bash
cp -u /home/admin/web/mydomain.com/public_html/dailyxchng/warehouse.txt /var/lib/mysql-files
mysql_pwd=syncit4321
cd /home/admin/web/mydomain.com/sync
mysql -u sync -p$mysql_pwd --database=database_name -e "call sp_sync_report();" > results.txt
echo "<h2>Report date $(date '+%d/%m/%Y %H:%M:%S')</h2><br/><br/> <strong>results.txt</strong> is an attached file which contains sync report." | mutt -e "set content_type=text/html" -s "Report date $(date '+%d/%m/%Y %H:%M:%S')" -a results.txt -- recipient@mydomain.com

【问题讨论】:

  • 能否添加用于调用脚本的 crontab 行?
  • 你试过把 /usr/bin/mysql 换成 mysql 吗?
  • @A.Villegas Crontab 命令是:55 2 * * * /home/admin/web/mydomain.com/sync/sync.sh
  • @nacho 我没有。我应该试试吗?
  • @Wed 您是否将您的 cron 添加到具有权限的用户中?您可以尝试按照55 2 * * * /home/admin/web/mydomain.com/sync/sync.sh &gt;&gt; /var/log/test.log 2&gt;&amp;1 记录您的 cronjob 输出并共享文件输出吗?

标签: mysql bash shell ubuntu cron


【解决方案1】:

cron 将使用非常精简的环境执行脚本。您可能希望将 mysql 命令的完整路径添加到 cron 脚本中

您可以通过

找到完整路径
which mysql

在提示符下, 或者您可以为 cron 调用添加扩展路径

1 2 * * * PATH=/usr/local/bin:$PATH scriptname

【讨论】:

  • 应该是/usr/bin/mysql
  • 是的,我试图说明 cron 的环境被剥离,因此您需要提供完整路径,通过提供不正确的路径,发布者将看到错误,并通过提供解决方案来查找海报将纠正错误的正确路径。给发帖者工具,而不是答案。
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多