首页 > 解决方案 > Mysql cli 未在 crontab 运行的 bash 脚本中返回数据

问题描述

我有一个通过 cron 作业执行的 bash 脚本

#!/bin/bash

# abort on errors
set -e

ABS_DIR=/path/

# extract the creds for the mysql db
DB_USER="USERNAME"
DB_PASS="PASSWORD"

function extract_data() {
        file=$2
        sql_query=`cat $ABS_DIR/$1`
        data=`mysql -u $DB_USER --password="$DB_PASS" -D "database" -e "$sql_query" | tail -n +2`

        echo -e "Data:"
        echo -e "$data"
}

extract_data "sql_query.sql" "log.csv"

bash extract.sh当使用mysqlcmd手动运行它时,可以正确获取数据,我会echo -e "$data"在控制台上看到 。

通过 cron 作业运行脚本时

* 12 * * * /.../extract.sh > /.../cron_log.txt

然后我得到一个空行保存到cron_log.txt文件中!?

标签: mysqlbashcron

解决方案


这是一个常见的问题;当从用户 shell 运行和从 crontab 运行时,脚本的行为不同。原因通常是由于用户 shell 和 crontab shell 中的环境变量不同;默认情况下,它们不相同。

要开始调试此问题,您可以直接从 crontab 引导 stderr 和 stdout,希望能捕获错误消息:

extract.sh &> /.../cron_log.txt

(注意 &)

另外:你有三个点(/.../)——这可能是一个错字,也可能是原因。


推荐阅读