为什么停止时脚本无法执行?

为什么停止时脚本无法执行?

三条线都可以跑。

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

相关内容