我有一个简单的bash脚本,其中包含一个名为servers的关联数组。服务器名是键,IP地址是值。当我想在所有服务器上运行某个脚本时,我使用这个。
for server in ${!servers[@]}; do
echo ""
echo -e "e[93mConnecting to $server...e[0m"
ssh $user@${servers[$server]} 'sudo /bin/bash -s' < $1 | while read line; do echo -e "e[92m[$server]e[0m $line"; done
done
当我以交互方式运行它并从stdout读取时,这很好,但现在我想从cron自动运行它,并在服务器上运行的脚本有条件地使用curl将数据发送到hipchat。
不幸的是,许多服务器没有有意义的主机名设置,我不能轻易地改变主机名,因为有几十年的老php网站上的一些使用主机名来确定他们正在运行的环境和设置数据库凭据等…我不想为此审核几十个甚至上百个网站。
我可以将$server的值作为脚本在向hipchat或电子邮件发送消息时可以使用的环境变量发送到服务器上生成的bash shell吗?我试着在/bin/bash之前做SERVER=$ SERVER,但这似乎不起作用。
我明白了。我只需要删除bash shell调用周围的单引号。然后添加SERVER=$ SERVER。
for server in ${!servers[@]}; do
echo ""
echo -e "e[93mConnecting to $server...e[0m"
ssh $user@${servers[$server]} sudo SERVER=$server /bin/bash -s < $1 | while read line; do echo -e "e[92m[$server]e[0m $line"; done
done