Mysql cli未在crontab运行的bash脚本中返回数据
我有一个通过cron作业执行的bash脚本Mysql cli未在crontab运行的bash脚本中返回数据,mysql,bash,cron,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
#!/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
(注意&)
另外:您有三个点(
/…/
)——这可能是打字错误,也可能是原因。这是一个常见问题;从用户shell和从crontab运行时,脚本的行为不同。原因通常是由于用户shell和crontab shell中的环境变量不同;默认情况下,它们是不同的
要开始调试此问题,您可以从crontab引导stderr和stdout,希望捕获一条错误消息:
extract.sh &> /.../cron_log.txt
(注意&)
另外:您有三个点(
/…/
)——这可能是打字错误,也可能是原因。我添加了输出重定向,但是没有返回错误;…
只是实际路径的占位符,我添加了输出重定向,但是没有返回错误;…
只是实际路径的占位符