我在 中有一个 upstart 脚本/etc/init/myexample.conf
。此作业基本上运行一个 java jar 文件。通常,我可以使用sudo start myexample
和来启动和停止它sudo stop myexample
。
我更改了 jar 文件并引入了一个导致 jar 崩溃的错误。使用 启动 jar 后sudo start myexample
,我在日志文件中看到了错误。
现在我想停止 upstart 作业并再次用可运行的 jar 文件替换该 jar 文件。我看到过两种情况:
sudo stop myexample
无限期挂起(至少 10 分钟)。我也无法使用 重新启动作业sudo start myexample
,我收到错误start: Job is already running: myexample
。sudo start myexample
无限期挂起,并sudo stop myexample
给出stop: Job has already been stopped: myexample
。
我还可以从命令行手动运行 jar。
pgrep -lf myexample
并且pgrep -l myexample
不返回任何内容。pgrep -l java
显示正在运行的其他 java 进程,但不显示与 myexample 对应的失败进程。Upstart 认为该进程正在运行,但实际上没有。
如何在不重启的情况下让 upstart 作业再次运行?
/etc/init/myexample.conf
:
description "myexample"
start on runlevel [2345]
stop on shutdown
respawn
respawn limit 3 120
expect daemon
setuid exampleuser
script
chdir /home/exampleuser/
java -jar /home/exampleuser/example.jar
end script
答案1
终止该进程。
您可以通过以下方式终止该进程(如果正在运行):
pkill <process_name>
或者
killall <process_name>
这将仅匹配进程名称,如果您想匹配整个命令行,请(小心)使用:
pkill -f <part_of_the_command>
因此就你的情况而言:
sudo pkill myexample
应该做。
您可以通过运行以下命令来预先确定:
pgrep -l myexample
检查进程 ID,以确保没有其他进程与该名称重合。
另外,使用 找到 PID 后pgrep -l myexample
,您也可以使用以下命令终止该进程kill
:
kill PID