linux 当java进程结束后使其重新运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 当java进程结束后使其重新运行相关的知识,希望对你有一定的参考价值。

我在linux服务器下开着个java写的服务器程序,但是有时程序会突然结束,所以我想在程序结束时重新运行这个程序,我应该怎么做呢

参考技术A 突发事件没办法预测吧。linux只有定时任务可以满足你的要求,如果你知道大概多久结束一次,可以试试定时任务。。。单还是不太满足你的要求。我觉得你还是先查清楚为什么会突然中止比较好。

运行脚本并在 SSH 断开连接(如管道损坏)后使其处于活动状态,而无需在后台强制它

【中文标题】运行脚本并在 SSH 断开连接(如管道损坏)后使其处于活动状态,而无需在后台强制它【英文标题】:Running a script and get it alive after a SSH disconnection (like a broken pipe) without forcing it in background 【发布时间】:2022-01-21 18:24:41 【问题描述】:

如果我有一个类似这样的 bash 脚本

#!/bin/bash -p

echo "PART A PID $$" >> "txt$$.txt";

for ((a=1; a<=10; a++))
do
  sleep 1
  echo "PART B$a" >> "txt$$.txt";
done
                                                                                                                                       
echo "PART C" >> "txt$$.txt";

我知道./script.sh &amp; disown 可以防止脚本在 SSH 退出时停止,但我想在不需要将脚本置于后台的情况下实现这一点。

PART A
PART B1
PART B2
PART B3
PART B4
PART B5
PART B6
PART B7
PART B8
PART B9
PART B10
PART C

并得到这样的输出。

我想等待循环得到一个有序的输出。

注意(我不想要 nohup)

编辑

我这样做是因为我想开始不止一个。

如果我做类似的事情

#!/bin/bash -p

(
echo "PART A PID $$" >> "txt$$.txt";
for ((a=1; a<=10; a++))
do
  sleep 1
  echo "PART B$a" >> "txt$$.txt";
done
echo "PART C" >> "txt$$.txt";
) & disown

PID 发生变化。这样,如果我想停止该进程,我将无法获取 pid 的原始引用。

我想知道是否有一些简单的东西可以放在底部,而不会打乱所有代码

【问题讨论】:

听起来您想为脚本实现一些自动后台逻辑,尽管您的“我想等待”似乎与此相矛盾。你试过什么? "听起来你想为脚本实现一些自动后台逻辑,虽然你的'我想等待'似乎与此相矛盾。你试过什么?"没有。我不知道该怎么做。我在for之后只添加了done &amp; disown,但是这样不尊重输出顺序。 双叉(改变 PID)如何完成自后台/守护进程,即使在 C 中也是如此。 从父进程中“拒绝”进程是将其从由父 shell 跟踪的作业表中删除。该表(与操作系统的进程表不同)是父 shell 进程状态的一部分,存储在该父 shell 的内存中。它不是整个操作系统控制的东西,因此不是一个单独的进程有能力直接进入和修改的东西。 顺便说一句,在程序中多次放入&gt;&gt; "txt$$.txt" 是一种不好的形式——每次进​​行重定向时,它都会重新打开输出文件。考虑将exec &gt;"txt$$.txt" 放在脚本顶部一次;这将使 all 未来的标准输出转到指定的文件。 【参考方案1】:

正如您在 cmets 中解释的那样,您的真正目标是让您的脚本在默认情况下仍然在前台运行,但要确保它在 SSH 断开连接后仍然存在。

您可以在不需要disown 的情况下以任何方式执行此操作,但代码需要放在顶部,而不是底部

#!/usr/bin/env bash

# redirect all three of stdin, stdout and stderr (not just stdout!)
exec >"txt$$.txt" 2>"err$$.txt" </dev/null

# ignore any SIGHUP signals received
trap : SIGHUP

# ...put the content of your script here

【讨论】:

\\\\///// 啊。好的。我不知道trap : SIGHUP 它是不被召回的。而且我也不知道exec &gt;"txt$$.txt" 2&gt;"err$$.txt" &lt;/dev/null 完成了所有工作。最佳答案 4 u ?? HIIIIIIIIIIIIIII ?

以上是关于linux 当java进程结束后使其重新运行的主要内容,如果未能解决你的问题,请参考以下文章

linux查看进程挂掉怎么处理

开机运行A.exe,判断一些进程是不是存在,如果存在则结束A.exe,如果这些进程不存在则重新运行A.exe?

运行脚本并在 SSH 断开连接(如管道损坏)后使其处于活动状态,而无需在后台强制它

Shell脚本监控Linux某个后台进程,当进程死掉后重新启动服务,以httpd为例

添加gitignore文件后使其生效

配置gitignore后使其生效命令