三条线都可以跑。
debian8@hwy:~$ trafficlog="/var/log/traffic.log"
debian8@hwy:~$ echo `date "+%Y-%m-%d %H:%M:%S "` | sudo tee -a $trafficlog
2017-02-04 21:20:41
debian8@hwy:~$ sudo iptables -v -L INPUT |grep Chain | sudo tee -a $trafficlog
Chain INPUT (policy ACCEPT 122 packets, 28381 bytes)
我来检查一下。
debian8@hwy:~$ cat /var/log/traffic.log
2017-02-04 21:20:41
Chain INPUT (policy ACCEPT 122 packets, 28381 bytes)
现在让它在我的 debian8 上以 runlevel6 运行。
sudo vim /etc/init.d/K99trafficLog.sh
#!/bin/bash
trafficlog="/var/log/traffic.log"
echo `date "+%Y-%m-%d %H:%M:%S "` | sudo tee -a $trafficlog
sudo iptables -v -L INPUT |grep Chain | sudo tee -a $trafficlog
sudo chmod +x /etc/init.d/K99trafficLog.sh
sudo ln -s /etc/init.d/K99trafficLog.sh /etc/rc6.d/K99trafficLog
现在来测试一下。
echo "" | sudo tee /var/log/traffic.log
然后重新启动以验证。
sudo cat /var/log/traffic.log
不幸的是,/var/log/traffic.log 中没有写入任何内容,为什么?
答案1
这些初始化脚本以 root 身份运行。因此你不需要所有这些 sudo/tee hack:
#!/bin/bash
exec >/var/log/traffic.log
date "+%Y-%m-%d %H:%M:%S "
iptables -v -L INPUT |grep Chain
另请注意,/etc/rc*.d/K*
运行于离开运行级别,而/etc/rc*.d/S*
运行于进入运行级别。
请注意,运行级别 6 很特殊。输入该运行级别会使系统重新启动,因此您实际上永远不会离开该级别。
您始终可以使用 手动调试脚本sudo bash -x /etc/rc6.d/K99trafficLog
。
另请注意,当前的 Debian 系统用于systemd
管理服务。请阅读关于 systemd 的内容,它处理的事情与旧的基于运行级别的方法不同。
答案2
sudo vim /etc/systemd/system/graphical.target.wants/Ktraffic.service
[Unit]
Description=Record net traffic
[Service]
Type=oneshot
ExecStart=/bin/bash /etc/init.d/K01trafficLog.sh
[Install]
WantedBy=poweroff.target
sudo vim /etc/init.d/K011trafficLog.sh
#!/bin/bash
trafficlog="/var/log/traffic.log"
date "+%Y-%m-%d %H:%M:%S " >> $trafficlog
iptables -v -L INPUT |grep Chain >> $trafficlog
systemctl enable ktraffic.service