gpt4 book ai didi

如果运行时间过长,Linux 单实例将终止

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

我正在使用以下内容来保持脚本的单个实例在我的服务器上运行。我有一个 cronjob 每分钟运行一次。

How do I daemonize an arbitrary script in unix?

#!/bin/bash

if [[ $# < 1 ]]; then
echo "Name of pid file not given."
exit
fi

# Get the pid file's name.
PIDFILE=$1
shift

if [[ $# < 1 ]]; then
echo "No command given."
exit
fi

echo "Checking pid in file $PIDFILE."

#Check to see if process running.
PID=$(cat $PIDFILE 2>/dev/null)
if [[ $? = 0 ]]; then
ps -p $PID >/dev/null 2>&1
if [[ $? = 0 ]]; then
echo "Command $1 already running."
exit
fi
fi

# Write our pid to file.
echo $$ >$PIDFILE

# Get command.
COMMAND=$1
shift

# Run command
$COMMAND "$*"

现在我发现我的脚本由于某种原因挂了,因此被卡住了。我想要一种方法来检查 $PIDFILE 是否“旧”,如果是,则终止进程。我知道这是可能的(检查文件上的时间戳)但我不知道语法或者这是否是个好主意。此外,当此脚本运行时,CPU 的使用率应该很高。如果挂起(很少见,但到目前为止至少发生过一次),CPU 使用率将降至 0%。如果我可以检查该进程是否真的挂起/不活动,那就太好了,但我不知道是否有一种简单的方法可以做到这一点(而且我不想在它被杀死的地方有很多误报,但它是运行良好)。

最佳答案

要回答标题中的问题,这似乎与您的问题完全不同,请使用 timeout .

现在,对于你的问题,我看不出它会卡在哪里,除非你给它一个 pid 文件的 fifo 队列。现在,要运行并重生,您只需在启动时运行此脚本一次:

#!/bin/bash

while /bin/true; do
"$@"
wait
done

这会在您从另一个问题得到的代码中引发另一个错误:"$*" 会将所有参数作为一个单个参数传递给脚本;没有引号,它会用空格分割参数。 "$@" 将单独传递它们并正确处理空白。

调用 /path/to/script 命令 [argument]...

关于如果运行时间过长,Linux 单实例将终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417074/

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