Bash
使用 at 時避免殭屍程序
我正在使用at在基於 Centos 的 Docker 容器中安排腳本。
例如
echo "bash /path/to/script.sh" | at now + 1 minute
它主要按預期工作,除了它每分鐘都會導致一個殭屍程序。我猜這種行為與文件中的這一行有關:
- 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。