我正在编写一个'简单'脚本来启动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
答案 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 &