我需要通过与我们公司的结算系统相关的cron运行每月bash脚本。这是通过两个存储过程完成的。当我通过MySQL控制台和工作台运行它们时,它们工作正常。
我看过this article,这基本上就是我这样做的方式。
我通过cron调用,这是一个看起来像这样的shell脚本:
mysql -h 192.168.1.1 -u<username> -p<password> mydatabase < /path/to/billing_periods.sql
我的文本文件包含其中的命令:
call sp_start_billing_period();
call sp_bill_clients();
第一个查询会运行,但第二个第二个查询运行,不会发生。
我可以创建一个包含这两个的存储过程 - 但我只是希望了解为什么会发生这种情况......也许是我犯了一个错误或者限制了你这样做...
我也考虑过这样做(两次调用MySQL shell):
mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_start_billing_period();"
mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_bill_clients();"
答案 0 :(得分:0)
我认为您只能在输入的.sql文件中执行单个语句,请参阅-e语句的mysql文档(联机帮助页)。
· --execute=statement, -e statement Execute the statement and quit. The default output format is like that produced with --batch.
-e是隐含的。至少当我做不同的mysql查询时,我把它们放在你自己的脚本中就像你已经建议的那样。
答案 1 :(得分:0)
您可以尝试用分号分隔每个语句。
mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_start_billing_period();call sp_bill_clients();"
如果您的陈述在文件中,您可以这样做:
while read LINE; do mysql -u<username> -p<password> mydatabase -e"$LINE";echo "-----------";done < statements.sql