私は愚かなことをしてwhileループを実行し、10秒ごとに電子メールを送信するawkを実行しました。バックグラウンドプロセスとして実行します。
egrep '^[1-9]' /etc/hosts | grep -v 'localhost' | awk '{ system("ssh "$1" \42\while (true); do uptime > /home/dan/test.txt; grep \x60\hostname\x60 /etc/hosts >> /home/dan/test.txt; echo >> /home/dan/test.txt; echo >> /home/dan/test.txt; /home/dan/myscript.pl | grep FAIL -A1 >> /home/dan/test.txt;echo >>/home/dan/test.txt; if [[ $(grep FAIL /home/dan/test.txt) != \x22\x22 ]]; then sendmail [email protected] < /home/dan/test.txt; fi;sleep 10; done\42 &"); print "" }'
メールがいっぱい来て、私が何か間違っていることに気づきましたが、シェルを閉じるだけで止めることができると思いました。それは動作しません。別のawksを実行し、ps-efwとgrepを実行してそのコマンドが実行されている可能性がある場合は、そのコマンドでキーワードを見つけて、そのコマンドに対してkill -9を実行しました。何も現れません。while
、、、、確認しましdan
た。sendmail
myscript.pl
egrep '^[1-9]' /etc/hosts | grep -v 'localhost' | awk '{ system("ssh "$1" \42 ps -efw | grep sendmail\42");}'
私の次の賭けは、このボックスでメールを送信するプロセスを確認し、それを終了またはブロックすることです。 ps auxには何も表示されないので、どうすればいいかわかりません。
答え1
スクリプトは通常「sleep 10」を実行します。まず静止状態にしておきます。
pkill -ef --signal STOP 'sleep 10'
これはwhileループをブロックします。または、同様の方法を使用してps -ef
スリープの親ID(PPID列)を見つけ、プロセスを終了してスリープモードに切り替えます。親プロセスは、見つからないコマンドをbash
実行するシェルです。while
ps
以下で見つかったプロセスIDを使用して親エントリを見つけた後pgrep
:
kill -hup $(ps -h -o ppid $(pgrep -f 'sleep 10'))