POST 메서드에서 받은 내용을 파일에 쓰기 위해 (ba)sh 스크립트를 작성했습니다.
#!/bin/sh
PORT=$1
FILE=$2
while true
do
echo -e "HTTP/1.1 200 OK\n\n" | ./busybox-armv7l nc -l -p $PORT | tr '[\r\n]' '#' | sed "s/.*##//" | tr '#' '\n' | ( read line; echo $line > $FILE; echo $line )
done
콘솔에서 스크립트를 시작하면 제대로 작동합니다.
./server 5000 /tmp/foo
그리고 지정된 파일은 수신된 데이터로 채워집니다. 하지만 부팅 시 시작하려고 하면 더 이상 작동하지 않습니다. 상업용 임베디드 장치이므로 /use/sbin/init.sh
직접 추가할 수 있는 스크립트가 있습니다.
#!/bin/sh
export PATH=/usr/bin:/bin/:/usr/sbin:/sbin
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /tmp
export MACHINE_ID=`cat /sys/devices/soc0/machine | sed 's/ /-/g'`
echo 8 >/proc/sys/kernel/printk
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts -ogid=5,mode=620
ln -snf /tmp /dev/shm
mkdir /tmp/sd
mount -t vfat /dev/mmcblk0p1 /tmp/sd -o rw
depmod -a
/etc/init.d/syslog start
ifconfig lo up
ifconfig eth0 up
sleep 1s
mii-tool --reset
ifconfig eth0 192.168.1.132
[ ! -x /etc/dropbear/dropbear_rsa_host_key ] || /usr/sbin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
[ ! -x /etc/dropbear/dropbear_dss_host_key ] || /usr/sbin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
/usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_host_key -p 22
/home/root/server.sh 5000 /tmp/foo > /tmp/log.txt &
/bin/sh
nc
서버가 아무것도 수신하지 못하고 log.txt
계속 채워지는 경우가 있습니다 \n
.
여기에 명백한 오류가 있습니까? 문제를 추가로 디버깅할 수 있는 방법이 있나요?
답변1
현재 디렉토리가 다른 경우에도 요청된 실행 파일을 찾을 수 있도록 상대 경로 대신 절대 경로를 사용하십시오.
echo -e "HTTP/1.1 200 OK\n\n" | /home/root/busybox-armv7l nc -l -p $PORT | tr '[\r\n]' '#' | sed "s/.*##//" | tr '#' '\n' | ( read line; echo $line > $FILE; echo $line )