2012-01-16 7 views
6

Soy nuevo en UNIX. Quiero iniciar mi aplicación java con un script así:Iniciando y matando la aplicación Java con script de shell (Debian)

Supuestamente funciona. Ejecuta la aplicación y escribe el archivo pid. Pero cuando intento para detener el proceso con un guión diferente que contiene lo siguiente:

#!/bin/sh 
kill -9 /var/run/ScriptCheck.pid 

la consola me da este error:

bash: kill: /var/run/ScriptCheck.pid: arguments must be process or job IDs 

Mi mejor conjetura es que no estoy escribiendo el código correcto en el script stop, quizás no dando el comando correcto para abrir el archivo .pid. Cualquier ayuda será muy apreciada.

Respuesta

12

estás pasando un nombre de archivo como argumento para kill cuando se espera que el número un (proces id), por lo que acaba de leer el identificador de proceso de ese archivo y pasarlo a kill:

#!/bin/sh 
PID=$(cat /var/run/ScriptCheck.pid) 
kill -9 $PID 
+0

¡Muchas gracias! esto es justo lo que estaba buscando :) – rMaero

+1

Para el registro, podría usar '$ ( Kevin

+0

no funciona en sh, funciona en bash, mejor usar cat – milan

0

Creo que necesita leer el contenido del archivo ScriptCheck.pid (que supongo que tiene una sola entrada con el PID del proceso en la primera fila).

#!/bin/sh 
procID=0; 
while read line  
do  
    procID="$line"; 
done </var/run/ScriptCheck.pid 
kill -9 procID 
+0

No entiendo el bucle while que escribió allí, e incluso con que todavía no está funcionando. La consola muestra lo mismo ahora ... También creo que necesito leer el contenido del archivo pid pero ESO es lo que no sé cómo hacer – rMaero

+0

Aún no funciona, tienes que interpolar '$ procID' en' kill'. – tripleee

0

Nunca he tenido que crear mi propio pid; tu pregunta fue interesante

Aquí es un fragmento de código fiesta que encontré:

#!/bin/bash 

PROGRAM=/path/to/myprog 
$PROGRAM & 
PID=$! 
echo $PID > /path/to/pid/file.pid 

Usted tendría que tener privilegios de root para poner su file.pid en/var/run --referenced por una gran cantidad de artículos - la cual es por qué los daemons tienen privilegios de root.

En este caso, debe poner su pid en un lugar acordado, conocido por sus secuencias de comandos de inicio y detención. Puede utilizar el hecho de que existe un archivo pid, por ejemplo, para no permitir que se ejecute un segundo proceso idéntico.

El $ PROGRAM & pone la secuencia de comandos en modo de "lote" de fondo.

Si desea que el programa se quede después de que salga su script, le sugiero que lo inicie con nohup, lo que significa que el programa no se va a apagar cuando el script se cierre.

Acabo de comprobar. El PID se devuelve con un nohup.

2

Una rápida y el método sucia sería:

kill -9 $(cat /var/run/ScriptCheck.pid) 
2

Su sintaxis es incorrecta, kill toma un identificador de proceso, no un archivo. Tampoco debería usar kill -9 a menos que sepa absolutamente lo que está haciendo.

kill $(cat /var/run/ScriptCheck.pid) 

o

xargs kill </var/run/ScriptCheck.pid 
Cuestiones relacionadas