如果启动时启动,nc 服务器将无法工作

如果启动时启动,nc 服务器将无法工作

我编写了一个 (ba)sh 脚本来将从 POST 方法接收到的内容写入文件:

#!/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 )

相关内容