允许命令在bash脚本中后台执行django runserver命令后运行?

时间:2015-05-14 12:52:38

标签: python django bash backgrounding

我正在编写一个'简单'脚本来启动django服务器,然后启动firefox,然后启动它。

我已经看到了</dev/null &技巧,并且可以在命令行上运行。但是当我在我的脚本中使用它时,它仍然挂在服务器上。使用 ctrl-z bg命令进行后台处理只会显示脚本而不是命令。

有没有办法让django传递'Do not hog input'标志?或者我可以通过某种方式在脚本中添加背景,而不是将&放在它的末尾?或者只是告诉脚本不要在单独的会话中运行它?

这是我的完整脚本(它完全是关于硬核的丑陋,如果我可以让它工作,它可能会得到美化):

SETTING_ENV=$1
if [ "$PWD" = "/home/$USERNAME/PROJECT/" ]; then
    pid=$(for pid in $(pidof -x "python"); do ps -p $pid -o pid,cmd --no-heading; done| grep [m]anage|head -1|cut -d" " -f2)
    if [ -z $pid ]; then
        python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null &
    else
        echo "Server still running on : $pid"
    fi
    pids=$(pidof -x firefox)
    for pid in $pids; do
        echo $pid
        if [ -z $pid ]; then
             echo "starting firefox"
             firefox --new-window localhost:8000 &
        else ecjp "Firefox already running on pid: $pid"
        fi
    done
else
    echo "$PWD is not /home/$USERNAME/PROJECT";
fi

1 个答案:

答案 0 :(得分:1)

您可以将所有命令放在括号中:

(python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null &)

当您在括号之间运行命令时,它将创建一个新的子shell,因此当您退出shell时,该命令将继续运行。

或者您也可以使用disown或nohup:

python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null & 
disown

-

nohup python ./manage.py runserver --settings=project.settings.$SETTING_ENV < /dev/null &