我正在尝试使用RTL-SDR设置无头RPi 3,以捕获来自NOAA气象卫星的图像。我正在研究从此处获取的代码:https://www.instructables.com/id/Raspberry-Pi-NOAA-Weather-Satellite-Receiver/
at
任务执行receive_and_process_satellite.sh
。此脚本开始收听rtl_fm
,在特定的sox
期间,该脚本将timeout
的音频通过管道传输到wav文件。然后它将音频处理成卫星图像。
问题在于,它不会等到timeout
之后才创建已处理的文件。相反,它创建了多余的文件,从而忽略了变量$3
中的文件名。
在任务处:
pi@rpi-rtl-sdr:~/weather/images $ atq
37 Sun Apr 12 12:44:00 2020 a pi
pi@rpi-rtl-sdr:~/weather/images $ at -c 37
#!/bin/sh
# atrun uid=1000 gid=1000
# mail pi 0
<--snipped out bunch of code generated by at-->
cd /home/pi/weather/predict || {
echo 'Execution directory inaccessible' >&2
exit 1
}
sudo /home/pi/weather/predict/receive_and_process_satellite.sh "NOAA 18" 137.9125 /home/pi/weather/predict/NOAA1820200412-124416 /home/pi/weather/predict/weather.tle 1586688256 936
因此,所有文件应以NOAA1820200412-124416
开头。
receive_and_process_satellite.sh
#!/bin/bash
# $1 = Satellite Name
# $2 = Frequency
# $3 = FileName base
# $4 = TLE File
# $5 = EPOC start time
# $6 = Time to capture
# -p -4 = $ PPM after running rtl_test -p
# -T = bias T
sudo /usr/bin/timeout ${6} /usr/bin/rtl_fm -f ${2}M -s 60k -g 25 -p -4 -E deemp -F 9 -T - | /usr/bin/sox -t raw -e signed-integer -b 16 -r 60k -c 1 - ${3}.wav rate 11025
PassStart=`expr ${5} + 90`
if [ -e ${3}.wav ]
then
/usr/local/bin/wxmap -T "${1}" -H ${4} -p 0 -l 0 -o ${PassStart} ${3}-map.png
/usr/local/bin/wxtoimg -m ${3}-map.png -e ZA ${3}.wav ${3}.png
fi
运行时创建的文件
pi@rpi-rtl-sdr:~/weather/images $ ls -lh
total 25M
-rw-r--r-- 1 root root 986K Apr 12 13:00 NOAA1820200412-124416-map.png
-rw-r--r-- 1 root root 1.2M Apr 12 13:00 NOAA1820200412-124416.png
-rw-r--r-- 1 root root 20M Apr 12 12:59 NOAA1820200412-124416.wav
-rw-r--r-- 1 root root 986K Apr 12 12:44 NOAA1820200412-124401-map.png
-rw-r--r-- 1 root root 1.9K Apr 12 12:44 NOAA1820200412-124401.png
-rw-r--r-- 1 root root 44 Apr 12 12:44 NOAA1820200412-124401.wav
请注意,at
它是如何在12:44:00开始创建非常小的44字节wav文件的脚本,甚至更改了文件名,与$3
不同!文件名是由at
作业传递给脚本的,所以我不知道这种情况如何发生。据我所知,receive_and_process_satellite.sh
不会更改文件名。
我已经尝试过的事情:
手动运行脚本sudo /home/pi/weather/predict/receive_and_process_satellite.sh "NOAA 18" 137.9125 /home/pi/weather/predict/NOAA1820200412-124416 /home/pi/weather/predict/weather.tle 1586688256 10
。仅在at
运行作业时,才会创建多余的文件。
更改为receive_and_process_satellite.sh
:
2.1从sudo timeout
到sudo /usr/bin/timeout
。
2.2将所有变量放在大括号{}之间。在此之前,这是一种混合,所以我认为这可能是在弄乱变量。
将sudo
添加到at
作业。以前,这个44字节的小wav文件和它试图从中解码的图像是root拥有的,其余的则是pi拥有的。 sudo之后,所有内容均由root拥有。
我找到了解决方案:在sudo crontab -e
中添加了用于添加at作业的cronjob。因此,当我执行atq
时,看不到这些作业。在测试期间的某个地方,我手动创建了at
作业,这意味着它们现在在那里存在过两次。当我执行sudo atq
时,才获得完整图片。
所以我删除了所有at
作业,并在crontab -e
中而不是sudo crontab -e
中添加了cronjob。
尽管这最终改变了文件名,但对我来说仍然是一个谜。