10

まず第一に、私は多くのDjangoインスタンスをこのようにセットアップして実行しています。

各プロジェクトには、gunicornなどを起動するscript.shシェルスクリプトがあります。

 #!/bin/bash
  set -e
  LOGFILE=/var/log/gunicorn/app_name.log
  LOGDIR=$(dirname $LOGFILE)
  NUM_WORKERS=3
  # user/group to run as
  USER=root
  GROUP=root
  PORT=8060
  IP=127.0.0.1
  cd /var/www/webapps/app_name
  source ../bin/activate
  test -d $LOGDIR || mkdir -p $LOGDIR
  exec /var/www/webapps/bin/gunicorn_django -b $IP:$PORT -w $NUM_WORKERS \
    --user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE

このスクリプトをコマンドラインからbashscript.shを使用して実行すると、サイトは完全に機能するため、Nginxは正しくセットアップされます。

サービスapp_namestartでupstartを使用するとすぐに、アプリが起動して停止します。ログファイルにも書き込みません。

これは/etc/init/app_name.conf内のapp_name.confファイルです:

description "Test Django instance"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec /var/www/webapps/app_name/script.sh

では、ここでの問題は何ですか?コマンドラインから実行する原因は機能しますが、トラフアップスタートを実行しても機能しません。そして、私は何が間違っているのかどこを見ればいいのかわかりませんか?

4

1 に答える 1

15

さて、私はそれを理解しました。誰かがこのようなことに遭遇した場合...

基本的に、私を妨げていたシェルスクリプトに関する知識の欠如です。

スクリプト ファイルの各行をコメント アウトした後、次の行に問題があることがわかりました: source ../bin/activate以降。

問題は、その前に 2 つのスペースがあったことでした。今では動作します。

これは私がそれを理解した方法です:

tail -f /var/log/syslog
Jun 26 10:54:59 saturn7 init: app_name main process (3521) terminated with status 127

ステータス 127 は基本的に見つからないコマンドであることがわかりました。したがって、問題は実際にはスクリプト ファイルにあることがわかりました。

しかし、なぜ bash ./script.sh が機能し、何も間違っていると言わないのかわかりません。シェルスクリプトについて読む必要があります..

于 2012-06-26T11:00:58.393 に答える