2015-05-14 5 views
4

Я пишу «простой» сценарий для запуска сервера django, а затем запускаю firefox, пока я dev.Разрешить запуск команд после фоновой команды django runerver в сценарии bash?

Я видел трюк </dev/null &, который работает в командной строке. Но когда я использую его в своем скрипте, он все еще зависает на сервере, начиная. Backgrounding с ctrl-z и команда bg только фоны сценария, а не команды.

Есть ли способ передать django флаг 'Do not hog input'? Или я могу использовать его внутри скрипта каким-то образом, кроме как положить & в конце его? Или просто скажите сценарию, чтобы он не запускал все это в отдельный сеанс?

Вот мой сценарий в полном объеме (это полное на злостном некрасиво, он может получить prettified, если я могу получить эту работу):

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 
+0

@EricRenouf сделано. – Pureferret

+0

Могу я просто проверить эти обновления от людей с аналогичной проблемой? Это звучит так, будто у него должно быть простое решение - не так много упреков? – Pureferret

ответ

1

Вы можете поместить всю вашу команду в скобках, как это:

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

Когда вы запускаете команду между скобками, она создаст новую под-оболочку, поэтому, когда вы выйдете из оболочки, команда продолжит выполнение.

Или вы можете также использовать отречься или поЬир:

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

-

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

Мне нужно попробовать это на работе – Pureferret

+0

Ни один из этих (в этом примере) не передает управление скрипту. Я использовал все три метода, о которых вы упоминали в другом месте, я знаю, что они нормально работают. В случае 'disown', когда я убил процесс для' ./manage runningerver', выдается: './start_gui.sh: строка 21: 4932 Завершенный python ./manage.py runderver --settings = project.settings. $ SETTING_ENV Pureferret