0

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

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

我有 4 台 unix 服务器(使用 freeBSD 操作系统),称它们为“Gorrila 的”和一台网关服务器(也使用 unix FreeBSD 操作系统),如果我想访问并登录到 Gorillas 服务器,请称其为“Monkey”,我必须使用putty访问Monkey,然后从monkey做ssh连接进入Gorillas服务器。

情况是,我的老板要求我每天在 gorrila 的服务器的第四个中获取 apache 错误日志。

一直以来,我都是手动做的。putty 到猴子 - ssh 到 gorrilas - 使用 scp 命令将错误日志复制到猴子服务器,然后使用 winscp 从猴子服务器获取错误日志。

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

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

4

1 回答 1

1

完成此任务的最简单方法是在 Gorilla4 上设置自动化作业。

您的第一个问题是您需要在 Gorilla4 和 Monkey 之间设置无密码 SSH 访问,因此您不需要人亲自输入密码。

虽然您可以使用“root”用户执行此操作,但我强烈建议您不要这样做。

而是在两个主机上创建一个维护用户:

$ useradd -m maintuser

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

$ ssh-keygen -t rsa -b 2048

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

现在,当您是 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

希望这可以帮助; 如果不出意外,它会给你很多谷歌:)

于 2013-06-04T07:48:16.750 回答