gpt4 book ai didi

linux - 如果不执行 script.sh 检查进程是否运行

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:37 26 4
gpt4 key购买 nike

我正在尝试找到一种监视进程的方法。如果该进程没有运行,则应再次检查以确保它确实崩溃了。如果它真的崩溃了,运行一个脚本(start.sh)

我尝试过 monit 但没有成功,我还尝试在 crontab 中添加此脚本:我使用 chmod +x monitor.sh 使其可执行

实际的程序称为program1

case "$(pidof program | wc -w)" in

0) echo "Restarting program1: $(date)" >> /var/log/program1_log.txt
/home/user/files/start.sh &
;;
1) # all ok
;;
*) echo "Removed double program1: $(date)" >> /var/log/program1_log.txt
kill $(pidof program1 | awk '{print $1}')
;;
esac

问题是这个脚本不起作用,我将它添加到 crontab 并将其设置为每 2 分钟运行一次。如果我关闭该程序,它不会重新启动。

是否有其他方法可以检查进程,并在进程崩溃时运行 start.sh?

最佳答案

不要无礼,但是您是否考虑过更明显的解决方案?

当 shell(例如 bash 或 tcsh)启动子进程时,默认情况下它会等待该子进程完成。

那么为什么不使用一个 shell 在 while(1) 循环中运行您的进程呢?每当进程终止时,无论出于何种原因,无论合法与否,它都会自动重新启动您的进程。

我在 mythtv 中也遇到了同样的问题。后端总是让我崩溃。这是海森虫。每月发生一次(平均)。很难追踪。所以我只写了一个在 xterm 中运行的小脚本。

啊,oninter业务意味着control-c将终止子进程而不是我的(父进程)脚本。同样, sleep 也在那里,所以我可以多次使用 control-c 来终止子进程,然后在其 sleep 时终止父进程脚本...

Coredumpsize 受到限制只是因为我不想用我无法使用的核心文件填满我的磁盘。

#!/bin/tcsh -f

limit coredumpsize 0

while( 1 )

echo "`date`: Running mythtv-backend"

# Now we cannot control-c this (tcsh) process...
onintr -

# This will let /bin/ls directory-sort my logfiles based on day & time.
# It also keeps the logfile names pretty unique.
mythbackend |& tee /....../mythbackend.log.`date "+%Y.%m.%d.%H.%M.%S"`

# Now we can control-c this (tcsh) process.
onintr

echo "`date`: mythtv-backend exited. Sleeping for 30 seconds, then restarting..."
sleep 30

end

附:如果您的子进程立即终止,这种 sleep 也会拯救您。否则不断地重生会导致你的 IO 和 CPU 达到极限,从而很难纠正问题。

关于linux - 如果不执行 script.sh 检查进程是否运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27111861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com