【发布时间】:2019-11-29 03:11:28
【问题描述】:
我有两台电脑。第一个“路由器”有两个 IP 地址(10.3.0.1 和 192.168.1.105)正在寻找互联网和子网 10.3.0.0/28 并有 net.ipv4.ip_forward=1。我还向 iptables 添加了规则以允许从 10.3.0.0/24 转发。第二个“用户”有一个 ip 10.3.0.14 和 def route 10.3.0.1 我需要创建 cron 作业,它将每小时写入日志文件 /var/log/net-usage/10.3.0.14.log 过渡数据的数量(上传和下载)。我需要使用 rsyslog(结合记录器)、cron 和 iptables。日志格式必须像
12 月 31 日 08:23:06 上传:171K;下载:8799K
我尝试使用来自 iptables -vnL 的转换信息来解决它
我编写了简单的 bash 代码 script.sh 并使其可执行
#!/bin/bash
date=$(date '+ %h %d %H:%M:%S')
upload=$(iptables -vnL |sed -n 11p| awk '{print"UPLOAD" " " $2 ";"}')
download=$(iptables -vnL | sed -n 12p | awk '{print "DOWNLOAD" " " $2}')
echo $date $upload $download >> /var/log/net-usage/10.3.0.14.log
我有两个问题。首先,当我从终端运行此脚本时 ./script.sh 我得到了我想要的
Ju20 15 08:05:12 上传 1446K;下载 25M
但是当试图将它添加到 cron 时。 crontab -e
0 * * * * /path_to_script/script.sh
我只有一个
7 月 20 日 05:00:01
我的 10.3.0.14.log 文件中没有上传/下载统计信息。
第二期。我需要使用 rsyslog(和记录器,如果需要)将文件 10.3.0.14.log 从路由器复制到用户机器。并将其放入 /var/log/net-usage.log。
【问题讨论】:
-
尝试将 iptables 更改为
/sbin/iptables(* 在 crontab 中。cron 的默认路径通常不包含 sbin。*) 或type iptables打印的任何内容。 -
或者,在该用户的 crontab 顶部附近,添加一行
PATH=/sbin:/bin:/usr/bin。 -
回答第二个问题,我推荐你tecmint.com/…。除此之外,您当然可以只使用
scp复制静态文件。 -
谢谢。我修改了我的脚本(/sbin/iptables),现在 cron 可以正确理解它。第一个问题已关闭。
-
no scp 不是我的答案。我需要 rsyslog 和记录器。
标签: bash logging networking cron rsyslog