加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 允许命令在bash脚本中后台执行django runserver命令后

发布时间:2020-12-20 13:49:49 所属栏目:Python 来源:网络整理
导读:我正在编写一个’简单’脚本来启动 django服务器,然后启动firefox,然后启动它. 我已经看到了 /dev/null 技巧,并且可以在命令行上运行.但是当我在我的脚本中使用它时,它仍然挂在服务器上.使用ctrl-z和bg命令进行后台处理只会显示脚本而不是命令. 有没有办法让
我正在编写一个’简单’脚本来启动 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

解决方法

您可以将所有命令放在括号中,如下所示:

(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 &

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读