【问题标题】:Mysql cli not returning data in bash script run by crontabMysql cli 未在 crontab 运行的 bash 脚本中返回数据
【发布时间】:2020-03-07 16:10:27
【问题描述】:

我有一个通过 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 手动运行它时,mysql cmd 可以正确获取数据,我在控制台上看到了echo -e "$data"

通过 cron 作业运行脚本时

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

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

【问题讨论】:

    标签: mysql bash cron


    【解决方案1】:

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

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

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

    (注意 &)

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

    【讨论】:

    • 我已经添加了输出重定向,但是没有返回错误; ... 只是实际路径的占位符
    猜你喜欢
    • 2017-12-02
    • 2018-08-10
    • 1970-01-01
    • 2020-06-19
    • 2014-06-25
    • 2014-02-20
    • 2014-07-12
    • 2022-01-05
    相关资源
    最近更新 更多