CentOSでデーモンとして実行するシェルスクリプトを取得していますか?


8

編集:どういうわけか、私の投稿の半分が何らかの理由で切り捨てられました。私はすぐに更新し、ここで更新されたことを上部に投稿します。

編集:不完全な質問で申し訳ありませんが、投稿を再度更新しました。

編集(8:55 PM EST 10/10/2011):Stevenが提案したように/srv/rhodecode/start.shを更新しましたが、それでも喜びはありません。それはそのようにハングし続けます:

[lpeabody@vcs rhodecode]$ sudo /etc/init.d/rhodecode-server start
Starting rhodecode-server:

以下のスクリプトを更新して、変更を示しました。


私は人生でシェルやbashスクリプトを書いたことがありません。CentOSにRhodeCodeをインストールしようとしていますが、DebianとGentooのinitスクリプトがありますが、RedHat / CentOSにはありません。サーバー環境はCentOS 5の実行に限定されているため、作成する必要があります。プロジェクトのソースは、こちらの Bitbucketにあります

アイデアは、CeleryとRabbitMQでRhodeCodeを実行することです。これはすべてPythonで記述されており、virtualenvを使用して、独自の独立した仮想コンテナー内に環境があります。私はここでシェルスクリプトのアイデアを得ました。

rhodecodeという名前のシステムユーザーを作成し、/ var / run / rhodecodeディレクトリを作成しました。これはrhodecodeが所有しています。また、production.iniが存在する/ var / www / rhodecodeと、rhodecodeが所有する/srv/rhodecode/start.shも作成しました。

権限:

[lpeabody@vcs run]$ ll -a /var/run/rhodecode
total 12
drwxr-xr-x  2 rhodecode rhodecode 4096 Oct 10 15:57 .
drwxr-xr-x 21 root      root      4096 Oct 10 16:07 ..

[lpeabody@vcs run]$ ll -a /var/www/rhodecode
total 76
drwxr-xr-x  4 rhodecode rhodecode  4096 Oct 10 16:47 .
drwxr-xr-x 11 root      root       4096 Oct  5 14:54 ..
drwxrwxr-x  3 rhodecode rhodecode  4096 Oct  5 19:40 data
-rw-r--r--  1 rhodecode rhodecode     0 Oct 10 16:41 debug.log
-rw-r--r--  1 rhodecode rhodecode  1466 Oct 10 16:41 error.log
-rw-rw-r--  1 rhodecode rhodecode  6000 Oct  6 15:27 production.ini
drwxrwxr-x  2 rhodecode rhodecode  4096 Oct  5 18:37 repos
-rw-r--r--  1 rhodecode rhodecode 44032 Oct  5 19:16 rhodecode.db

[lpeabody@vcs run]$ ll -a /srv/rhodecode/
total 16
drwxr-xr-x 2 rhodecode rhodecode 4096 Oct 10 16:40 .
drwxr-xr-x 4 root      root      4096 Oct  7 14:40 ..
-rwxr-xr-x 1 rhodecode rhodecode  277 Oct 10 16:40 start.sh

次のbashおよびシェルスクリプトがあります。

/srv/rhodecode/start.sh

#!/bin/bash                                                                                               
# run this as the rhodecode user!                                                                         

WDIR=/var/www/rhodecode                                                                                   
VIRTUALENV_DIR=/opt/python_virtualenvironments/rhodecode-venv                                             
export PYTHON_EGG_CACHE=/tmp/.python-eggs                                                                 

source $VIRTUALENV_DIR/bin/activate                                                                       

cd $WDIR                                                                                                  
exec paster serve production.ini 1> debug.log 2> error.log

/etc/init.d/rhodecode-server

#!/bin/sh                                                                                                                                                                                                                                    
#                                                                                                                                                                                                                                            
# rhodecode-server RhodeCode server instance                                                                                                                                                                                                 
#                                                                                                                                                                                                                                            
#                                                                                                                                                                                                                                            

# PATH=/sbin:/usr/sbin:/bin:/usr/bin                                                                                                                                                                                                         
NAME=rhodecode-server                                                                                                                                                                                                                        
DESC=rhodecode-server                                                                                                                                                                                                                        
USER=rhodecode                                                                                                                                                                                                                               
PID_FILE=/var/run/rhodecode/pid                                                                                                                                                                                                              
CMD=/srv/rhodecode/start.sh                                                                                                                                                                                                                  

LOCK_FILE=/var/lock/subsys/$NAME                                                                                                                                                                                                             

. /etc/init.d/functions                                                                                                                                                                                                                      

RETVAL=0                                                                                                                                                                                                                                     

remove_pid () {                                                                                                                                                                                                                              
    rm -f ${PID_FILE}                                                                                                                                                                                                                        
}                                                                                                                                                                                                                                            

start_rhodecode () {                                                                                                                                                                                                                         
    daemon --user $USER --pidfile $PID_FILE $CMD                                                                                                                                                                                        
    RETVAL=$?                                                                                                                                                                                                                                
    [ $RETVAL -eq 0 ] && touch $LOCK_FILE                                                                                                                                                                                                    
    return $RETVAL                                                                                                                                                                                                                           
}                                                                                                                                                                                                                                            

stop_rhodecode () {                                                                                                                                                                                                                          
    killproc -p $PID_FILE                                                                                                                                                                                                                    
    RETVAL=&?                                                                                                                                                                                                                                
    rm -f $LOCK_FILE                                                                                                                                                                                                                         
    rm -f $PID_FILE                                                                                                                                                                                                                          
    return $RETVAL                                                                                                                                                                                                                           
}                                                                                                                                                                                                                                            

restart_rhodecode () {                                                                                                                                                                                                                       
    stop_rhodecode                                                                                                                                                                                                                           
    start_rhodecode                                                                                                                                                                                                                          
    RETVAL=$?                                                                                                                                                                                                                                
}                                                                                                                                                                                                                                            

case "$1" in                                                                                                                                                                                                                                 
  start)                                                                                                                                                                                                                                     
    echo -n $"Starting $DESC: "                                                                                                                                                                                                              
    start_rhodecode                                                                                                                                                                                                                          
    echo                                                                                                                                                                                                                                     
    ;;                                                                                                                                                                                                                                       
  stop)                                                                                                                                                                                                                                      
    echo -n $"Stopping $DESC: "                                                                                                                                                                                                              
    stop_rhodecode                                                                                                                                                                                                                           
    echo                                                                                                                                                                                                                                     
    ;;                                                                                                                                                                                                                                       
  restart)                                                                                                                                                                                                                                   
    echo -n $"Restarting $DESC: "                                                                                                                                                                                                            
    restart_rhodecode                                                                                                                                                                                                                        
    echo                                                                                                                                                                                                                                     
    ;;
  *)                                                                                                                                                                                                                                         
    echo $"Usage: $0 {start|stop|restart}"                                                                                                                                                                                                   
    RETVAL=1                                                                                                                                                                                                                                 
    ;;                                                                                                                                                                                                                                       
esac                                                                                                                                                                                                                                         

exit $RETVAL

を実行してsudo /etc/init.d/rhodecode-server startからを実行すると、/ srv / rhodecode / start.shからps -aux | grep pasterpaster serve production.iniコマンドが実行され、rhodecodeのユーザーID(102)で実行されていることがわかります。

102       5222  0.7  7.8 144300 80988 ?        Sl   16:08   0:00 /opt/python_virtualenvironments/rhodecode-venv/bin/python /opt/python_virtualenvironments/rhodecode-venv/bin/paster serve production.ini

ただし、pidファイルは作成されないため、initスクリプトからサーバーを停止できません。デーモンがpidfileを作成していない理由がわかりません。pidファイルへのパスが有効であり、権限が正しい。考え?


@mailq質問を更新しました。なんらかの理由で投稿の半分が切り捨てられました...問題は、デーモンがpidファイルを作成しない理由に関するものです。
レスターピーボディ

/var/run/rhodecode/pidこれは、これを実行しているユーザーに対して正しい許可ですか?そのことについて、その変数は正しい/var/run/rhodecode.pidですか、それとも正しいはずですか?
John Gardeniers、2011年

@John私の投稿に権限セクションを追加して、このプロセスに関係するすべてのディレクトリとファイルの権限を一覧表示しました(私の知る限り)。
レスターピーボディ

デバッグ情報を同封してくださいsh -x /etc/init.d/rhodecode-server start
クォンタム

daemon --pidfilepidファイルの場所のみを指定します。CentOSの関数に必要な--make-pidfileオプションがないようです
KCD

回答:


1

あなたの問題はにあると思います/srv/rhodecode/start.sh。現在paster、別のバックグラウンドプロセスとして開始され、すぐに終了しています。これは、start.shそれ自体が管理対象の長期実行デーモンプロセスであると想定しているinitスクリプトに問題を引き起こします。

したがって、の最後の行を/srv/rhodecode/start.sh次のように変更してみてください。

exec paster serve production.ini 1> debug.log 2> error.log

使用exec可能にstart.sh なっ pasterた後でデーモン化され、daemoninitスクリプトでコマンド。


私はこれがまさに問題であることを知っていましたが、何を検索するのかまったくわかりませんでした。&を使用した場合と使用しない場合の両方でペースターを試しましたが、明らかに両方の結果がありませんでした。残念ながら、私はオフィスから帰宅しました。明日の朝、この最初のことを実装します。
レスターピーボディ

私は実際にSSHdで試してみましたが、どちらも機能しませんでした。ハングし続けます。投稿を更新します。
レスターピーボディ、

0

場所を指定する必要がありますか?--nameオプションを使用して名前を付けることはできますか?これにより、PIDが作成され、完了時にクリーンアップされます。したがって、次のようになります。

$NAME="rhodecode"
start_rhodecode () {                                                                                                                                                                                                                         
    daemon --user $USER --name $NAME $CMD                                                                                                                                                                                        
    RETVAL=$?                                                                                                                                                                                                                                
    return $RETVAL                                                                                                                                                                                                                           
} 

stop_rhodecode () {                                                                                                                                                                                                                          
    daemon --name $NAME --stop                                                                                                                                                           
    RETVAL=&?                                                                                                                                                                                                                                                                                                         
    return $RETVAL                                                                                                                                                                                                                           
}     

Centos 6.5には '--stop'または--nameのようなオプションはありません
MariuszS

何もありません--name--stopCentOSに5のいずれか。
ジムミッチェナー2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.