【发布时间】:2019-09-09 13:44:55
【问题描述】:
我通过 bash 脚本维护了多个具有相同 Web 应用程序的服务器。命令基本包括ssh和scp,每个服务器都是一样的,只是服务器的IP、用户和端口不同。到目前为止,我编写了与服务器一样多的命令以在同一脚本中维护。这很好用,但是当我开始有许多服务器要维护时,我更愿意在 MySQL 表中列出这些服务器,然后在我的 bash 脚本中使用这个列表,因此当我有时我不需要保持所有服务器更新要维护的新服务器。
目前我无法以适当的方式从 MySQL 中提取数据,然后可以在 bash 脚本中执行。
我目前的方法是在查询中使用 CONCAT 函数,如下所示:
outputofquery=$($MYSQL -u"$USER" --batch -p"$PASSWORD" --skip-column-names -h"$HOST" -e "SELECT CONCAT('scp -P ', server_port, ' $file ', server_user, '@', server_ip, ':/var/www/html/site/') FROM server_ssh;" $DBNAME)
echo ${outputofquery%$'\t;'*}
给出以下结果:
scp -P 22 text.php user1@1.1.1.1:/var/www/html/site/ scp -P 12345 text.php user2@2.2.2.2:/var/www/html/site/
MySQL 查询产生的每个命令都放在同一行,这意味着无法执行..
我想在查询中的 site/ 之后添加一个分号,这样即使每个命令都在同一行上,它们也可以独立执行,但碰巧只有最后一个 scp 命令被执行,之前的命令被忽略。
您能否告诉我如何使用来自 MySQL 表的数据批量执行 ssh 和 scp 命令?
【问题讨论】: