所以,我有我的networking上的设备,在那里监听一个端口的连接,当一个连接时,它倾倒ascii数据。 我需要将这些数据捕获到一个文件。 我写了一个死的简单的shell脚本来做到这一点:
#!/bin/bash #Config Variables. Age is in Days. DATA_ROOT=/root/data FILENAME=data_`date +%F`.dat HOST=device COMPRESS_AGE=3 #Sanity Checks if [ ! -e $DATA_ROOT ] then echo "The directory $DATA_ROOT seems to not exist. Please create it." exit 1 fi if [ -e $DATA_ROOT/$FILENAME ] then echo "You seem to have extracted data already today. Aborting" exit 1 fi #Get Data nc $HOST 2202 > $DATA_ROOT/$FILENAME #Compress old Data find $DATA_ROOT -type f -mtime +$COMPRESS_AGE -exec gzip {} \; exit 0
当我手工运行它时,它工作的很好,但是当我从cron运行它时,它不捕获任何输出。 如果我用telnetreplacenc,我会看到有关转义序列的初始telnet标题,而不是数据。
想法? 我试过强迫bash像-i一样用交互式shell来操作。 我试过redirectstderr和stdout。 我知道这应该是一些愚蠢的事情,但我完全失败了。 这使我疯狂…
编辑我也只是注意到,从我以前的所有尝试在这个数控进程一直在睡觉,当我杀了他们,cron发给我一堆非感性的错误信息。 至less现在我有一些东西要挖掘!
你的脚本可能正在工作,而这只是输出结果的迷失。 你可以尝试把nc输出捕获到它自己的variables中,然后将该variables回显给
#Get Data ncoutput=$( /path/to/nc $HOST 2202 2>&1 ) printf "%s\n" "$ncoutput" > $DATA_ROOT/$FILENAME #Compress old Data find $DATA_ROOT -type f -mtime +$COMPRESS_AGE -exec gzip {} \; exit 0
printf保存了输出的格式,而echo却没有。