Far eseguire lo script di shell come demone su CentOS?


8

EDIT: Per qualche ragione metà del mio post è stato troncato, non sono sicuro di cosa sia successo. Aggiornerò presto e posterò che è aggiornato qui in alto.

EDIT: ho aggiornato di nuovo il post, scusate la domanda incompleta.

EDIT (20:55 EST 10/10/2011): Ho aggiornato /srv/rhodecode/start.sh come suggerito da Steven, ancora nessuna gioia. Continua ad appendere così:

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

Ho aggiornato gli script di seguito per mostrare le modifiche.


Non ho mai scritto una shell o una sceneggiatura bash in vita mia. Sto cercando di installare RhodeCode su CentOS, e ci sono script init per Debian e Gentoo, ma non per RedHat / CentOS che è pazzo per me. Quindi devo scriverne uno perché il nostro ambiente server è limitato all'esecuzione di CentOS 5. La fonte del progetto può essere trovata qui su Bitbucket .

L'idea è di eseguire RhodeCode con Celery e RabbitMQ. È tutto scritto in Python e ho l'ambiente nel suo contenitore virtuale separato usando virtualenv. Ho avuto l'idea per lo script della shell qui .

Ho creato un utente di sistema chiamato rhodecode e creato la directory / var / run / rhodecode ed è di proprietà di rhodecode. Ho anche creato / var / www / rhodecode in cui risiede production.ini, così come /srv/rhodecode/start.sh, tutto di proprietà di rhodecode.

permessi:

[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

Ho i seguenti script bash e shell.

/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

Quando corro sudo /etc/init.d/rhodecode-server starte poi corro ps -aux | grep paster, posso vedere il paster serve production.inicomando da /srv/rhodecode/start.sh passato e funziona con l'id utente di rhodecode (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

Tuttavia, non viene creato alcun file pid, quindi non riesco a fermare il server dal mio script init. Non sono sicuro del perché il demone non stia creando il pidfile. Il percorso del file pid è valido e le autorizzazioni sono corrette. Pensieri?


@mailq Ho aggiornato la mia domanda. Per qualche ragione metà del post è stato troncato ... La domanda riguarda il motivo per cui il demone non crea un file pid.
Lester Peabody,

Le autorizzazioni su sono /var/run/rhodecode/pidcorrette per l'utente come questo è in esecuzione? Del resto, la variabile è corretta o dovrebbe essere /var/run/rhodecode.pid?
John Gardeniers,

@Giovanni Ho aggiunto una sezione delle autorizzazioni al mio post per elencare le autorizzazioni su tutte le directory e i file coinvolti in questo processo (per quanto ne so).
Lester Peabody,

Allegare le informazioni di debug sh -x /etc/init.d/rhodecode-server start?
quanta,

daemon --pidfilespecifica solo dove si trova il file pid. le funzioni in CentOS non sembrano avere l' --make-pidfileopzione richiesta
KCD

Risposte:


1

Penso che il tuo problema sia presente /srv/rhodecode/start.sh. Attualmente sta iniziando pastercome processo in background separato e quindi immediatamente uscendo. Ciò pone un problema per il tuo script init, che prevede start.shdi essere gestito da solo il processo daemon di lunga durata.

Quindi, prova a modificare l'ultima riga di /srv/rhodecode/start.shper leggere come segue:

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

Uso execmarche start.sh diventano paster , che viene poi daemonized dal daemoncomando nello script di init.


Nella mia mente sapevo che questo era esattamente il problema, non avevo idea di cosa cercare. Ho provato Paster sia con che senza & e ovviamente entrambe le volte senza risultati. Purtroppo sono appena tornato a casa dall'ufficio, implementerò questa prima cosa domani mattina.
Lester Peabody,

In realtà ho solo SSHd e l'ho provato e non ha funzionato neanche .. continua a bloccarsi, aggiornerò il mio post.
Lester Peabody,

0

Devi specificare la posizione? Potresti usare l'opzione --name per dargli un nome? Ciò creerà il PID per te e lo pulirà quando hai finito. Quindi sembrerebbe:

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

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

Non esiste alcuna opzione come '--stop' o --name in Centos 6.5
MariuszS

Non c'è --nameo neanche --stopin Centos 5.
Jim Mitchener,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.