如何在两台服务器上执行shell脚本

时间:2014-08-03 07:57:14

标签: shell

我想自动化以下情况:
我有两台服务器以n / w连接。如果想要在两台服务器上获取/var/logs/messages。我尝试自动化它,如下所示,但我无法继续执行步骤4,因为登录到其他服务器后,该进程不再运行。

  1 echo "Hello $HOSTNAME"
  2 date
  3 echo -n > /var/log/messages
  4 ssh 10.30.3.2;echo -n > /var/log/messages;exit
  5 ls
  6 cp /var/log/messages > my_bug_log.txt
  7 ssh 10.30.3.2;cp /var/log/messages > my_bug_log.txt

如何自动从两台服务器获取和获取日志?

已编辑:

  1 #!/bin/bash
  2
  3 echo "Hello $HOSTNAME"
  4 date
  5 echo -n > /var/log/messages
  6 ssh 10.30.3.2 "echo -n > /var/log/messages ";exit
  7 echo "welcome"

退出其他主机后,不会执行echo“welcome”。

已编辑:

ssh 10.30.3.2“cd / var / log”“touch bug_iteration_ $ i”“cp / var / log / messages> bug_iteration_ $ i”

2 个答案:

答案 0 :(得分:1)

从每个远程服务器获取两个消息日志相当容易。但是,您似乎没有使用正确的工具来完成工作。这个答案假定您熟悉创建dsa密钥以允许ssh-keygen主机之间的无密码连接,并且设置正常并且正常工作。我还假设你需要复制消息日志的权限。

正确的工作工具是rsync(其他人可以使用,但rsync是事实上的标准)。您要检索文件的目的是:

rsync -uav 10.30.3.2:/var/log/messages /path/to/store/messages.10.30.3.2

这将在/var/log/messages上获得10.30.3.2并将其保存在/path/to/store/messages.10.30.3.2的本地计算机上。

现在,如果您想在使用rsync检索消息日志之前以echo -n > /var/log/messages建议的某种方式修改它,请记住ssh将执行您在远程主机上告诉它的任何命令。因此,如果您想在检索之前在远程日志中输入内容,则可以使用:

ssh 10.30.3.2 "echo -n 'something' > /var/log/messages"

(我不确定你在回声中抑制换行符的原因......但是对于他自己的每一个都是如此)在10.30.3.2上执行多个命令的另一个技巧就是在{{1}上创建一个脚本这就是你需要的,并确保它设置了执行位。然后,您可以通过ssh在您的计算机上运行10.30.3.2上的脚本: `     ssh 10.30.3.2 /path/to/your/script.sh

如果这还没有回答您的问题,请发送评论。有点不清楚你的帖子实际上是在尝试做什么。

评论后

目前还不清楚你要做什么。您似乎希望10.30.3.2 echohostname然后按date截断消息文件,然后ssh echo -n > /var/log/messages截断其10.30.3.2文件和{strong>在ssh命令完成/var/log/messages脚本之后exit。您可以看到,echo "Welcome"完成后,您的下一个ssh 10.30.3.2 "echo -n > /var/log/messages "命令会导致您运行的脚本为exit。你不需要exit那里。

第二个附录:

让我们这样做吧。您希望在每台主机上运行相同的命令,并希望能够通过exit在远程主机上运行这些命令。因此,让我们在ssh中的每个框中创建一个包含以下内容的脚本:

/usr/local/bin/empty_message_log.sh

现在确保它已设置执行位:

#!/bin/bash

echo "Hello $HOSTNAME"          # echos Hello hostname to terminal
date                            # echos date to terminal
echo -n > /var/log/messages     # truncates /var/log/messages to (empty)

if [ "$HOSTNAME" == "fillin localhost hostname" ]; then
    # runs this same script on 10.30.3.2
    # only run if called on local machine
    ssh 10.30.3.2 /usr/local/bin/empty_message_log.sh 
fi

echo "welcome"                  # echos welcome and exits

将此脚本放在您希望使用此功能的所有主机上。现在,您可以在本地计算机上调用此脚本,它将在10.30.3.2的远程主机上运行相同的命令集。只有chmod 0755 /usr/local/bin/empty_message_log.sh # adjust permissions as required 与运行它的框匹配时,它才会远程调用并执行脚本。

答案 1 :(得分:0)

您是否考虑过使用scp来获取所需的文件?

除此之外,如果您需要对多台机器执行相同的操作,您可以查看ansible(http://www.ansibleworks.com