mysql - 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
当使用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
(注意 &)
另外:你有三个点(/.../
)——这可能是一个错字,也可能是原因。
推荐阅读
- python - Small World 聚类系数和特征路径长度
- c# - 程序在调试器中逐步正确运行,但不正常
- pandas - 结合 groupby 和 resample
- reactjs - 用 axios 取消突变 react-apollo
- php - 尝试在 linux powershell 上导入模块 ActiveDirectory
- r - 如何根据一个变量逐行删除 kable() 表中的灰色突出显示和不同的行?
- mongodb - 无法模拟 mongoRepository 实例
- c# - 我可以从我的库中访问 void 到正在使用它的应用程序吗?
- azure-data-factory - 如何创建动态管道以将数据从多个本地 SQL 服务器复制到单个服务器
- python - 使用 ffmpeg/ffprobe 的 CMD 错误输出子进程