使用时避免僵尸进程

使用时避免僵尸进程

我在用着在基于 Centos 的 Docker 容器中安排脚本。

例如echo "bash /path/to/script.sh" | at now + 1 minute

它大部分都按预期工作,但例外是它每分钟都会产生一个僵尸进程。我猜这个行为与文档中的这一行有关:

  1. at-job 在单独的 shell 调用中执行,运行在单独的进程组中,没有控制终端,但环境变量、当前工作目录、文件创建掩码(参见 umask(1))和系统资源限制除外。

我已经看到并尝试过从进程表中删除僵尸进程无济于事。

我可以让僵尸 ps 消失吗?或者有没有其他方法可以做到这一点,而不会产生相同的僵尸 ps?

编辑:其中一个脚本的内容:

#!/bin/bash
exec 1> >(logger -s -t $(basename $0)) 2>&1 
#probe the seed node if this isn't the seed node
# set -ex
[[ `hostname` =~ -([0-9]+)$ ]] || exit 1
ordinal=${BASH_REMATCH[1]}
#if this is the first node then attempt to probe second until successful
if [[ $ordinal -eq 0 ]]; then
  while ! gluster peer probe {{gluster.service_name}}-1.{{gluster.service_name}}.default.svc.cluster.local; do sleep 2; done
fi
#if this is the second node then probe the first to create the trusted pool
if [[ $ordinal -eq 1 ]]; then
  while ! gluster peer probe {{gluster.service_name}}-0.{{gluster.service_name}}.default.svc.cluster.local; do sleep 2; done
fi

答案1

我忘了回复说我仅通过使用 cron 就解决了这个问题。

(crontab -l 2>/dev/null; echo "*/1 * * * * /path/to/job -with args") | crontab -

https://stackoverflow.com/a/9625233/400048

注意,如果在 Docker 中运行,则需要启动 crond。

相关内容