我意识到像这样的单个僵尸进程没什么可担心的,我只是希望我的代码能够产生更专业的结果(没有僵尸)。
我的 cron 作业调用 shell 脚本时,仅在第一次启动 shell 脚本时生成单个 shell 脚本僵尸;即在最初启动时“tail -f”“赶上”之后的第一次。这是一个 @reboot cron 作业,因此在重新启动时,即使 cron 作业多次启动 shell 脚本,也不会生成 shell 脚本僵尸,只要“tail -f”在其监控的文件 (/var/log/kern.log) 中立即有更多行可用。一旦 cron 作业“tail -f”赶上 kern.log 的最后一行,僵尸将在“tail -f | grep ...|xargs myshellscript”产生输出之后的下一次创建。一旦创建了单个僵尸,无论 cron 条目产生进一步输出的次数是多少,都不会再添加更多僵尸。
我尝试过修改 cron 条目来启动以“nohup”开头、以“&”结尾的 shell 脚本,但僵尸仍然会产生。
crontab 条目:
@reboot nice -n15 /usr/bin/tail -F -n 0 /var/log/kern.log |/bin/grep --line-buffered ' SRC=' |stdbuf -o0 /bin/grep -v 'SRC=10\.' |stdbuf -o0 grep -v 'SRC=0\.0\.0\.0' |stdbuf -o0 grep -v 'SRC=127.0\.0\.1' |stdbuf -o0 /bin/grep -v 'SRC=192\.168\.' |stdbuf -o0 awk '{for (i=4;i<=NF;i++) {if ($i ~ "^SRC=") {{gsub("SRC=","",$i); printf $i" \""} printf "kern.log "$1" "$2" "$3; for (i=i;i<=NF;i++) {if ($i ~ "^PROTO=" || $i ~ "^SPT=" || $i ~ "^DPT") {printf " "$i}} print "\""}}}' |xargs -l1 /home/homeowner/blacklistme.sh >/dev/null 2>&1
/home/homeowner/blacklistme.sh 是否以“exit”命令结束都无法阻止僵尸进程。
这是我在 GitHub 上分享的防火墙项目的一部分,旨在保护 Linux 家庭监控和自动化所有者。更多信息请访问https://github.com/kenneth558/robust-linux-firewalling-scripting。感谢所有能帮助我的人!