O script de serviço chama outro script com variáveis

3

Eu tenho um script de serviço simples tomcat7 em /etc/init.d/ para iniciar e parar meu servidor de aplicativos (tomcat) sob o usuário do tomcat. No RHEL6.

#!/bin/bash
# description: Tomcat Start Stop
# processname: tomcat
# chkconfig: 234 20 80

CATALINA_HOME=/usr/local/www/tomcat-7.0.54

case $1 in
start)
/bin/su tomcat $CATALINA_HOME/bin/startup.sh
;;
stop)
/bin/su tomcat $CATALINA_HOME/bin/shutdown.sh 30
;;
esac
exit 0

O que funciona bem. Tanto startup.sh como shutdown.sh chamam um script chamado catalina.sh . Estes são scripts pré-criados que acompanham o servidor de aplicativos.

Eu posso usar catalina.sh diretamente como: ./catalina.sh stop 30 -force

O que me permite especificar um tempo de espera de 30 segundos e, em seguida, faz um kill -9 se o processo não tiver terminado. Mas não consigo fazer as variáveis funcionarem no script tomcat7 service. Se eu mudar para:

stop)
/bin/su tomcat $CATALINA_HOME/bin/catalina.sh stop 30 -force

Eu recebo um erro:

[root@543917-web1 bin]# service tomcat7 stop
/bin/su: invalid option -- 'o'

Posso passar os três argumentos sem alterar o script catalina.sh?

TIA

    
por Hal50000 22.08.2014 / 17:04

1 resposta

1

Você pode usar su com -c :

/bin/su tomcat -c "$CATALINA_HOME/bin/catalina.sh stop 30 -force"

Da página de manual su :

-c, --command=COMMAND
    pass a single COMMAND to the shell with -c
    
por 22.08.2014 / 17:40