Linux:进程标识完成或被杀后发送邮件

时间:2016-01-10 19:23:04

标签: linux email ubuntu ubuntu-12.04

我希望在其他用户的进程终止或完成后收到我的电子邮件通知。我可以通过其进程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

但是,我发现即使在其他用户的流程完成或其他用户杀死他或她的流程后,我仍然没有收到任何通知或电子邮件。有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

问题很可能是这个检查:

if ps -ef | grep -q 'process_name'; then

始终为true。为什么?只需在命令行上直接运行它,而不是-qgrep,这很明显:

$ 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

答案 1 :(得分:2)

防止grep进程自身匹配的另一种常用技巧是用[]围绕模式中的一个字母,如下所示:

grep -q '[p]rocess_name'

如果你知道这个过程,那么你根本不需要grep,你可以使用ps本身的退出代码:

if ps -p pid &> /dev/null; then
    sleep 1

其中pid当然是进程ID。