[英]Linux: Send mail after a process id finishes or is killed
我希望在其他用户的进程终止或完成后在我的电子邮件中收到通知。 我可以通过另一个用户的进程ID或出现在“ top”命令中的进程的名称来识别另一个用户的进程。
为了做到这一点,我编写了以下脚本:
while true; do
if ps -ef | grep -q 'process_name'; then
sleep 1
else
echo "complete" | mail -s "process exiting" abc@gmail.com
fi
done
但是,我发现即使在另一个用户的过程完成或另一个用户终止了他或她的过程之后,我仍然没有收到任何通知或电子邮件。 有人可以帮我一下吗。
问题很可能是此检查:
if ps -ef | grep -q 'process_name'; then
这将永远是true
。 为什么? 只需直接在命令行上运行它即可,而无需-q
到grep
,这将显而易见:
$ ps -ef | grep 'process_name'
user 4550 3349 0 09:17 pts/0 00:00:00 grep --colour=auto process_name
$ echo $?
0
上面的示例显示grep
会一直成功,因为它会找到自己!
有很多解决方法。 一种方法是使用pgrep
而不是grep
。
if pgrep 'process_name' > /dev/null; then
防止grep
进程自身匹配的另一种常用技术是用[]
包围模式中的一个字母,如下所示:
grep -q '[p]rocess_name'
如果您知道的过程,则根本不需要grep
,则可以使用ps
本身的退出代码:
if ps -p pid &> /dev/null; then
sleep 1
pid当然是进程ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.