3行すべてを実行できます。
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ハッキングはすべて必要ありません。
#!/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