用于访问远程服务器的脚本,获取错误日志并自动重命名。

时间:2013-06-04 04:27:16

标签: shell unix scripting ssh freebsd

嗨,我的名字是Evan,UNIX上的新手:)

我想问一下关于unix的脚本。情况就是这样:

我有4个unix服务器(使用freeBSD OS),让我们称之为“Gorrila's” 还有一个网关服务器(也是使用unix FreeBSD OS),让我们称之为“Monkey's” 如果我想访问并登录Gorillas服务器,我必须使用putty访问Monkey然后,从猴子做ssh连接进入Gorillas服务器。

案件是,我的老板问我,在gorrila的服务器中,第四天得到一个apache错误日志。

这一次,我正在手动做。 putty to monkeys - ssh to gorrilas - 使用scp命令将错误日志复制到monkey server,然后从monkeys服务器获取winscp的错误日志。

问题是: 如何用这种情况制作脚本? 如何自动重命名error_log因为,每个服务器中的错误日志名称具有相同的名称。这是“01_error.log”。我必须手动重命名它们,以便它们不能互相替换。

我希望,有人可以帮助我。 全部,谢谢你的帮助和时间。抱歉英语不好。 :)

1 个答案:

答案 0 :(得分:1)

实现这一目标的最简单方法是在Gorilla4上设置自动作业。

您的第一个问题是,您需要在Gorilla4和Monkey之间设置无密码的SSH访问权限,这样您就不需要有人亲自输入密码。

虽然您可以使用' root'用户我强烈建议反对它。

而是在BOTH主机上创建维护用户:

$ useradd -m maintuser

然后切换到新用户并在Gorilla4上创建SSH密钥:

$ ssh-keygen -t rsa -b 2048

提示时接受默认值。然后将id_rsa.pub文件复制到Monkey上maintuser的〜/ .ssh目录中。

现在,当你是" maintuser"在Gorilla4上,你可以在没有密码的情况下SSH到Monkey。

然后你可以创建一个名为" copy_log.sh":

的脚本
#!/bin/bash
# copy_log.sh

log_path="/path/to/logdir"
log_name="01_error.log"
target_host="monkey"

echo "copying ${log_name} to ${target_host}..."
# note: $(hostname) below will add "Gorilla4" to the name of the file
scp ${log_path}/${log_name} maintuser@${target_host}:/path/to/dest/$(hostname)_${log_name} || {
    echo "Failed to scp file"
    exit 2
}
echo "completed successfully"

使其可执行:

$ chmod +x copy_log.sh

将它添加到Gorilla4上的maintuser crontab中,以便在你自己想要的任何时间运行,比如说每天早上8点:

00 08 * * * /path/to/copy_log.sh >> /some/log/dir/copy_log.out 2>&1

希望这会有所帮助;如果没有别的,它会给你足够的谷歌:))