我有一个通过 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/