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
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
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