Bash

使用 at 時避免殭屍程序

  • November 20, 2017

我正在使用at在基於 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

我忘了回帖說我只是使用 cron 來解決這個問題。

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

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

注意,如果在 Docker 中執行,則需要啟動 crond。

引用自:https://serverfault.com/questions/871810