使用shell脚本(Debian)启动和终止java应用程序

使用shell脚本(Debian)启动和终止java应用程序,java,linux,shell,debian,Java,Linux,Shell,Debian,我是UNIX新手。我想用如下脚本启动java应用程序: #!/bin/sh java -jar /usr/ScriptCheck.jar & echo $! > /var/run/ScriptCheck.pid 这应该是可行的。它运行应用程序,并编写pid文件。但当我尝试使用包含以下内容的不同脚本停止进程时: #!/bin/sh kill -9 /var/run/ScriptCheck.pid 控制台显示以下错误: bash: kill: /var/run/ScriptChec

我是UNIX新手。我想用如下脚本启动java应用程序:

#!/bin/sh
java -jar /usr/ScriptCheck.jar &
echo $! > /var/run/ScriptCheck.pid
这应该是可行的。它运行应用程序,并编写pid文件。但当我尝试使用包含以下内容的不同脚本停止进程时:

#!/bin/sh
kill -9 /var/run/ScriptCheck.pid
控制台显示以下错误:

bash: kill: /var/run/ScriptCheck.pid: arguments must be process or job IDs
我最好的猜测是,我没有在stop脚本中编写正确的代码,可能没有给出正确的命令来打开.pid文件。
任何帮助都将不胜感激。

我认为您需要阅读ScriptCheck.pid文件的内容(我假设它只有一个条目,第一行是进程的pid)

#/垃圾箱/垃圾箱
procID=0;
读行时
做
procID=“$line”;

完成我从未创建过自己的pid;你的问题很有趣

下面是我找到的一段bash代码片段:

#!/bin/bash

PROGRAM=/path/to/myprog
$PROGRAM &
PID=$!
echo $PID > /path/to/pid/file.pid
您必须具有root权限才能将file.pid放入/var/run(许多文章都引用了该文件),这就是守护进程具有root权限的原因

在这种情况下,您需要将pid放在一些商定的位置,即启动和停止脚本已知的位置。例如,可以使用pid文件存在的事实,不允许运行第二个相同的进程

$PROGRAM&将脚本置于后台“批处理”模式

如果您想让程序在脚本退出后挂起,我建议使用nohup启动它,这意味着当脚本注销时,程序不会死掉


我刚查过。PID返回一个nohup。

当它需要一个(进程id)号时,您正在将一个文件名作为参数传递给
kill
,因此只需从该文件中读取进程id并将其传递给
kill

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

一种快速而肮脏的方法是:

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

语法错误,
kill
采用进程id,而不是文件。您也不应该使用
kill-9
,除非您完全知道自己在做什么

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


xargs kill我不理解您在那里编写的while循环,即使这样,它仍然不起作用。控制台正在显示相同的内容。。我还认为我需要读取pid文件的内容,但这是我不知道如何做的,仍然不起作用,您必须在
kill
中插入
$procID
。对于记录,您可以使用
$(
kill $(cat /var/run/ScriptCheck.pid)
xargs kill </var/run/ScriptCheck.pid