【问题标题】:How to restart either process when it kills automatically自动终止时如何重新启动任一进程
【发布时间】:2017-06-01 03:02:32
【问题描述】:

我有 2 个需要同时运行的进程(process1 和 process2-同名)。

我编写了一个脚本,如果这 2 个进程被杀死,它将自动重新启动所有 2 个进程。 但我被困在如果任何一个进程(任何人)被杀死,那么特定进程不会重新启动。

#!/bin/bash

cd /Desktop/XYZ/

./process1 &

cd /Desktop/XYX/new/

./process1 &

while :
do

while pgrep process1 >/Desktop/XYZ/out.txt;

do

   sleep 5

done
    cd /Desktop/XYZ/

    ./process1 &

   cd /Desktop/XYX/new/

./process1 &

   sleep 10
done

任何帮助将不胜感激。

【问题讨论】:

  • 您目前如何检查进程是否已被杀死?通常的方法是在后台启动它们并将它们的 pid(进程 ID)记录在一个文件中。然后您可以定期使用此文件查看 pid 是否处于活动状态并具有正确的名称(因为 pid 可以重复使用),如果没有,则重新启动并存储新的 pid。
  • 我已经将 pid 存储在 ''pgrep process1 >/Desktop/XYZ/out.txt" 中。

标签: bash shell scripting automation


【解决方案1】:

只需在自己的子进程中启动监控代码即可。

#!/bin/bash

while :; do
    cd /Desktop/XYZ/
    ./process1
done &

while :; do
    cd /Desktop/XYX/new
    ./process1
done &

read  # halt until it gets input
pkill -P $$  # kill all children

我必须补充一点,这可能不是您希望长期运行服务的方式。您应该了解systemd service files 是如何为您或您的系统拥有的任何其他服务管理器执行此操作的。

【讨论】:

  • 我知道它可能不适用于长期服务。但截至目前使用此代码,我只能在两个进程都被杀死时重新启动这两个进程。请给出一些想法或在单个进程时修改它当它被杀死时将重新启动而不影响其他进程的状态
  • @bkb 我的代码就是这样做的。独立运行两个进程,在后台进行监控。否则我不明白你的问题。
猜你喜欢
  • 1970-01-01
  • 2017-11-26
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多