
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 )