我想自动化以下情况:
我有两台服务器以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”
答案 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
echo
和hostname
然后按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)