停止するとスクリプトが実行されないのはなぜですか?

停止するとスクリプトが実行されないのはなぜですか?

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

関連情報