중지되면 스크립트가 실행되지 않는 이유는 무엇입니까?

중지되면 스크립트가 실행되지 않는 이유는 무엇입니까?

세 줄 모두 실행할 수 있습니다.

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

이러한 초기화 스크립트는 루트로 실행됩니다. 따라서 이러한 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

관련 정보