Iniciando e matando o aplicativo java com shell script (Debian)

Eu sou novo no UNIX. Quero iniciar meu aplicativo java com um script assim:

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

Isso está supostamente funcionando. Ele executa o aplicativo e grava o arquivo pid. Mas quando tento parar o processo com um script diferente que contém isso:

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

o console me dá este erro:

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

Meu melhor palpite é que não estou escrevendo o código certo no script de parada, talvez não esteja dando o comando certo para abrir o arquivo .pid. Qualquer ajuda será muito apreciad

questionAnswers(10)

QuestionSolution

Você está passando um nome de arquivo como argumento parakill quando espera um número (proces id), basta ler a identificação do processo desse arquivo e passá-la parakill:

#!/bin/sh 
PID=$(cat /var/run/ScriptCheck.pid) 
kill -9 $PID
 milan16 de jan de 2012 20:01
não funciona em sh, funciona em bash, melhor usar cat
 rMaero16 de jan de 2012 19:50
Muito obrigado!!! isto é exatamente o que eu estava procurando:)
 Kevin16 de jan de 2012 19:59
Para o registro, você pode usar$(<file) ao invés de$(cat file).

Um método rápido e sujo seria:

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

Sua sintaxe está errada,kill usa uma identificação de processo, não um arquivo. Você também não deve usarkill -9, a menos que você saiba absolutamente o que está fazend

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

o

xargs kill </var/run/ScriptCheck.pid

Acho que você precisa ler o conteúdo do arquivo ScriptCheck.pid (que suponho que tenha apenas uma entrada com o PID do processo na primeira linha

#!/bin/sh
procID=0;
while read line    
do    
    procID="$line";
done </var/run/ScriptCheck.pid
kill -9 procID
 rMaero16 de jan de 2012 19:44
Eu não entendo o loop while que você escreveu lá, e mesmo com isso ainda não está funcionando. O console está mostrando o mesmo agora. Eu também acho que preciso ler o conteúdo do arquivo pid, mas ISSO é o que eu não sei como fazer
 tripleee16 de jan de 2012 19:46
Ainda não funciona, você precisa interpolar$procID nokill.

Eu nunca tive que criar meu próprio pid; sua pergunta foi interessante.

Aqui está um trecho de código de bash que encontrei:

#!/bin/bash

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

Você teria que ter privilégios de root para colocar seu arquivo.pid em / var / run - referenciado por muitos artigos - e é por isso que os daemons têm privilégios de roo

Nesse caso, você precisa colocar seu pid em algum lugar acordado, conhecido por seus scripts de início e parada. Você pode usar o fato de existir um arquivo pid, por exemplo, para não permitir a execução de um segundo processo idêntic

The $ PROGRAM e coloca o script no modo "lote" de segundo plan

Se você deseja que o programa permaneça após a saída do script, sugiro iniciá-lo com nohup, o que significa que o programa não será interrompido quando o script sai

Eu acabei de verificar. O PID é retornado com um nohup.

yourAnswerToTheQuestion