嗨,我的名字是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”。我必须手动重命名它们,以便它们不能互相替换。
我希望,有人可以帮助我。 全部,谢谢你的帮助和时间。抱歉英语不好。 :)
答案 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
希望这会有所帮助;如果没有别的,它会给你足够的谷歌:))