Я написал сценарий, который сравнивает время, и если это то же время начала, что и текущее время, а не время окончания, он запускает tcpdump. И если время окончания похоже на текущее время, он ищет PID и убивает его. Но я думаю, что в этом все еще есть логическая ошибка, но я действительно не знаю, как ее решить.
Code:
#!/bin/sh
source /media/usbhd-sd[b-d]1/config.conf
pluggedin=true
echo $TIMESTART
echo $TIMEEND
echo $$
echo $Zeit
echo $$ >> /tmp/test.txt
while [ $pluggedin ];do
Zeit=$(date +"%T")
if [[ $TIMESTART == $Zeit ]];then
if [[ $TIMEEND != $Zeit ]] && [ "$(pidof tcpdump)" == "" ];then
echo "tcpdump started"
sudo tcpdump -i eth0 -w /media/usbhd-sd[b-c]1/abfrage2.pcap &
#sudo umount /dev/sdb1
else
pid1=$(ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}')
echo $pid1 >> /tmp/test.txt
sudo kill $pid1
echo "autodump stopped"
fi
else
echo "tcpdump not yet started"
fi
done
Я уже отлаживал его, и он дает мне этот вывод, когда первое if является правильным, но когда первое if неверно, также не проверяется внутреннее if. Будет ли работать, если я проверю PID и сделаю или во внешнем if?
Code:
+ [ true ]
+ date +%T
+ Zeit=08:51:00
+ [[ 08:51:00 == 08:51:00 ]]
+ [[ 08:51:02 != 08:51:00 ]]
+ pidof tcpdump
+ [ 9945 == ]
+ awk /abfrage2/ && ! /awk/{print $1}
+ ps -eo pid,args
+ pid1=
+ echo
+ sudo kill -9
kill: you need to specify whom to kill
+ echo autodump stopped
autodump stopped
Обновление
Я сам обнаружил некоторые ошибки
Это самый последний код. Он работает почти сейчас, но tcpdump все еще не убивается. Но он уже записывает данные в файл.
#!/bin/sh
source /media/usbhd-sd[b-d]1/config.conf
pluggedin=true
echo $TIMESTART
echo $TIMEEND
echo $$
echo $Zeit
echo $$ >> /tmp/test.txt
while [ $pluggedin ];do
Zeit=$(date +"%T")
if [[ $TIMESTART == $Zeit ]] || [[ "$pid1" != "" ]];then
if [[ $TIMEEND != $Zeit ]];then
if [ "$pid1" == "" ];then
echo "tcpdump started"
sudo tcpdump -i eth0 -w /media/usbhd-sd[b-c]1/abfrage2.pcap &
pid1=$(ps -eo pid,args|awk '/abfrage2/ && ! /awk/{print $1}')
#sudo umount /dev/sdb1
else
echo "Tcpdump already running"
fi
else
if [ "$pid" != ""];then
echo $pid1 >> /tmp/test.txt
sudo kill -9 $pid1
echo "autodump stopped"
else
echo "autodump already stopped"
fi
fi
else
echo "tcpdump noch yet started"
fi
done
Теперь я получаю этот вывод через отладку. Когда время составляет 40 с, PID недоступен:
+ [ true ]
+ date +%T
+ Zeit=10:45:39
+ [[ 10:45:30 == 10:45:39 ]]
+ [[ 30285 != ]]
+ [[ 10:45:40 != 10:45:39 ]]
+ [ 30285 == ]
+ echo Tcpdump already running
Tcpdump already running
+ [ true ]
+ date +%T
+ Zeit=10:45:40
+ [[ 10:45:30 == 10:45:40 ]]
+ [[ 30285 != ]]
+ [[ 10:45:40 != 10:45:40 ]]
+ [ != ]
sh: !=: argument expected
+ echo autodump already stopped
autodump already stopped