Inicio y eliminación de la aplicación Java con script de shell (Debian)

Soy nuevo en UNIX. Quiero iniciar mi aplicación Java con un script como este:

#!/bin/sh
java -jar /usr/ScriptCheck.jar &
echo $! > /var/run/ScriptCheck.pid

Esto supuestamente está funcionando. Ejecuta la aplicación y escribe el archivo pid. Pero cuando trato de detener el proceso con un script diferente que contiene esto:

#!/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 de detención, tal vez no estoy dando el comando correcto para abrir el archivo .pid. Cualquier ayuda será muy apreciada

Respuestas a la pregunta(10)

Un método rápido y sucio sería:

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

Su sintaxis es incorrecta,kill toma una identificación de proceso, no un archivo. Tampoco deberías estar usandokill -9 a menos que sepa absolutamente lo que está haciendo.

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

xargs kill </var/run/ScriptCheck.pid

Creo que necesita leer el contenido del archivo ScriptCheck.pid (que supongo que solo tiene una 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
 rMaero16 ene. 2012 19:44
No entiendo el ciclo while que escribiste allí, e incluso con eso todavía no funciona. La consola muestra lo mismo ahora ... También creo que necesito leer el contenido del archivo pid, pero ESO es lo que no sé hacer
 tripleee16 ene. 2012 19:46
Eso todavía no funciona, tienes que interpolar$procID en elkill.
Solución de preguntas

Estás pasando un nombre de archivo como argumento akill cuando espera un número (identificación de proceso), así que solo lea la identificación del proceso de ese archivo y páselo akill:

#!/bin/sh 
PID=$(cat /var/run/ScriptCheck.pid) 
kill -9 $PID
 rMaero16 ene. 2012 19:50
¡¡¡Muchas gracias!!! esto es justo lo que estaba buscando
 Kevin16 ene. 2012 19:59
Para el registro, puede usar$(<file) en lugar de$(cat file).
 milan16 ene. 2012 20:01
no funciona en sh, funciona en bash, mejor usar cat

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

Aquí hay un fragmento de código bash que encontré:

#!/bin/bash

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

Tendrías que tener privilegios de root para poner tu file.pid en / var / run, al que hacen referencia muchos artículos, por lo que los demonios tienen privilegios de root.

En este caso, debe poner su pedido en un lugar acordado, conocido por sus scripts 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.

The $ PROGRAM & pone el script en modo de "lote" de fondo.

Si desea que el programa se cuelgue después de que su script se cierre, le sugiero que lo inicie con nohup, lo que significa que el programa no morirá, cuando su script cierre la sesión.

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

Su respuesta a la pregunta