Mysql cli 不在 crontab 运行的 bash 脚本中返回数据

标签 mysql bash cron

我有一个通过 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 文件中!?

最佳答案

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

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

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

(注意 &)

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

关于Mysql cli 不在 crontab 运行的 bash 脚本中返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58810396/

相关文章:

php - 如何将数据从 cron 传递到 Controller laravel php

mysql - 执行 mysql 命令的脚本无法与 cron 作业一起使用

mysql - ThinkingSphinx::SphinxError 失去与 MySQL 服务器的连接 ( 'reading initial communication packet')

php - 无法将行更新为与当前相同的值吗?

linux - 如何查看服务器正在执行的所有请求 URL(最终 URL)

php - 如何强制 GPG 接受来自 STDIN 的输入而不是尝试打开文件?

node.js - 使用 cron 每 12 小时重新启动 pm2 应用程序

php - PHP 语法 while($row =mysql_fetch_row...?

PHP网站编码问题

bash - Unix 删除所有出现的字符并保存