如果我通过 nohup 运行的后台进程失败或完成,我将如何发送电子邮件?我在 for 循环中通过 nohup 运行很多后台进程:
for afolder in $dir/dothis*
do
nohup nice COMMAND afolder &
done
我想是因为后台进程,当我这样做时
nohup nice COMMAND afolder & ; tail nohup.out | mail [email protected] -s "job done"
我在执行时收到一封电子邮件,而不是完成时。我如何根据流程是否未能完成或成功完成来发送不同的电子邮件主题行?
提前致谢!
答案1
一种选择是在后台作业中进行邮件发送:
for afolder in "$dir"/dothis*; do
nohup sh -c '
outfile=$(mktemp)
if nice COMMAND "$1" >"$outfile" 2>&1; then
success_or_fail="success"
else
success_or_fail="failure"
fi
tail "$outfile" |
mail -s "job done ($success_or_fail)" [email protected]
rm "$outfile"' sh "$afolder" &
done
这与您执行相同的循环,但随后启动在 下运行的子脚本nohup
。该脚本将 的当前值$afolder
作为其第一个命令行参数,并在if
语句中运行该命令。它success_or_fail
根据命令的结果进行适当设置,然后发送电子邮件。
该命令的所有输出都将重定向到一个临时文件,然后tail
对该电子邮件进行 -ed 操作,并在 shell 退出时将其删除。