4

我正在编写一个“简单”脚本来启动 django 服务器,然后在我开发时启动 Firefox。

我已经看到了这个</dev/null &技巧,并且可以在命令行上使用。但是当我在我的脚本中使用它时,它仍然挂在启动的服务器上。Backgrounding withctrl-zbg命令仅使脚本背景化,而不是命令背景化。

有没有办法让 django 传递一个“不要占用输入”标志?或者我可以在脚本中以某种方式将它作为背景,而不是放在&它的末尾?或者只是告诉脚本不要在单独的会话中运行它?

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

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
4

1 回答 1

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 &
于 2015-05-16T13:38:19.163 回答