init.d脚本无法重定向可执行文件的stdin stderr并获得错误的进程ID

| 我有一个简单的python脚本
test.py
#!/user/bin/python
print \"Why is it not redirecting?\"
然后我有一个init.d脚本,在其中尝试执行
./test.py &> logfile.log & PID=$!
,除了发生的是PID错误之外,它会打印到我的shell中,而不是重定向。我正在通过将脚本放在/etc/init.d中并运行ѭ3testing来测试脚本(我使用sudo,因为我的真实脚本正在打开服务器上的端口)。 init.d脚本的相关部分。
case \"$1\" in
  start)
        if [ -f $PIDF ]
        then
            echo \"$NAME is currently running. Killing running process...\"
            $IEXE stop
        fi
        cd $LDIR
        if [ -f $LDIR/$NAME.log ] ; then
            echo \"File already exist.\"
        fi
        sudo python ./$EXEC &> $LDIR/$NAME.log & MYPID=$!
        ls -l $LDIR | grep $NAME
        echo $MYPID
        ps aux | grep \"router\"
        ps aux | grep $MYPID
        echo \"$NAME are now running.\"
        ;;
输出:
-rw-r--r-- 1 root root      0 2011-04-25 13:57 productcrawler-router.log
11944
Why is it not redirecting?
root     11053  0.0  0.2  20364  5704 pts/2    Sl   13:45   0:00 python ./router.py
root     11933  2.0  0.0   1896   552 pts/2    S+   13:57   0:00 /bin/sh /etc/init.d/productcrawler-router start
root     11948  0.0  0.0   4008   752 pts/2    S+   13:57   0:00 grep router
root     11950  0.0  0.0   4008   756 pts/2    S+   13:57   0:00 grep 11944
productcrawler-router are now running.
然后我有一个init.d脚本:
#! /bin/sh
# chkconfig 345 85 60
# description: startup script for produtcrawler-router
# processname: producrawler-router

NAME=productcrawler-router
LDIR=/etc/productcrawler/services
EXEC=test.py
PIDF=/var/run/productcrawler.pid
IEXE=/etc/init.d/productcrawler-router

### BEGIN INIT INFO
# Provides:          productcrawler-router
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     5
# Default-Stop:      0 1 2 3 6
# Description:       Starts the productcrawler-router service
### END INIT INFO

if [ ! -f $LDIR/$EXEC ]
then
        echo \"$LDIR/$EXEC not found.\"
        exit
fi

case \"$1\" in
  start)
        if [ -f $PIDF ]
        then
            echo \"$NAME is currently running. Killing running process...\"
            $IEXE stop
        fi
        cd $LDIR
        if [ -f $LDIR/$NAME.log ] ; then
            echo \"File already exist.\"
        fi
        sudo python ./$EXEC &> $LDIR/$NAME.log & MYPID=$!
        ls -l $LDIR | grep $NAME
        echo $MYPID
        ps aux | grep \"router\"
        ps aux | grep $MYPID
        echo \"$NAME are now running.\"
        ;;
  stop)
        if [ -f $PIDF ]
        then
                echo \"Stopping $NAME.\"
                PID_2=`cat $PIDF`
                if [ ! -z \"`ps -f -p $PID_2 | grep -v grep | grep \'$NAME\'`\" ]
                then
                        kill -9 $PID_2
                fi
                rm -f $PIDF
        else
                echo \"$NAME is not running, cannot stop it.\"
        fi
        ;;
  force-reload|restart)
        $0 stop
        $0 start
        ;;
  *)
        echo \"Use: /etc/init.d/$NAME {start|stop|restart|force-reload}\"
        exit 1
esac
在过去的两个小时中,我一直在用头撞墙。任何人有任何想法吗?     
已邀请:
您不应在初始化脚本中使用ѭ7。在使用uses9ѭ的脚本中,请勿使用
&>
。您可能不应该在初始化脚本中使用ѭ10,我认为您的用法确实是错误的。 我建议使用ѭ11来简化所有操作,尤其是PID的东西,但是我不确定是否可以将其与重定向输出到日志文件一起使用。     

要回复问题请先登录注册