学习 Shell 写了一个执行程序后发邮件的小脚本

2016-12-10 16:25:02 +08:00
 eastonwyz

最近在学习 Shell 编程,正好自己也经常在服务器上跑程序,所以写了这么个小脚本来方便监控程序的运行。

程序放在了mail-exec, 主要功能就是可以直接通过 mail-exec [command]来执行程序,程序结束后将会给指定的邮箱发送成功或失败的邮件。邮件的发送功能是通过 ssmtp 实现的,实测对 google, qq, 163 都可以支持。

所以,欢迎大家使用和交流~因为第一次自己写小脚本,肯定很弱鸡,还请各位巨巨多多提建议或者 pr !

4986 次点击
所在节点    Linux
11 条回复
hosiet
2016-12-10 17:05:14 +08:00
我觉得通用的 sendmail 接口比 ssmtp 更实用。
eastonwyz
2016-12-10 19:14:49 +08:00
@hosiet 谢谢, sendmail 有哪些好处呢?因为我之前配置过 ssmtp ,所以就直接用了 ssmtp
knightdf
2016-12-10 20:27:41 +08:00
execute something || echo "xxx error" | mail -s 'title' 'email address'
一行 shell 的事
neilp
2016-12-10 20:32:05 +08:00
应该使用 "$@" 而不是 "$*"

不需要使用 "sh -c", 直接加小括号在子 shell 中运行就可以了.

比如下面的例子: 它可以在 POSIX 兼容的任何 shell 中运行. 比如 Unix/BSD/Mac/Solaris/Linux/Cigwin 等等.

```
#!/usr/bin/env sh


if ( "$@" ); then
msg="Command '$@' success! "
else
msg="Command '$@' failed! "
fi



echo "$msg" | mail -s "$@" myemail@gmail.com


```
aleen42
2016-12-10 21:30:28 +08:00
我寫的這個文檔你也可以參考一下。 https://github.com/SoundTooth/checkServer#1-mutt

Mutt 可以實現無賬號即可發送郵件,服務器報警就是用的 Mutt 。
smallaccount
2016-12-11 02:30:16 +08:00
@knightdf 直接进垃圾邮件箱了,怎么办?
eastonwyz
2016-12-11 11:50:35 +08:00
@neilp 谢谢,这样确实更好。求问怎么能获得 error 信息呢?
knightdf
2016-12-11 12:03:11 +08:00
@smallaccount 发件域名添加信任就可以了
eastonwyz
2016-12-11 12:36:08 +08:00
@neilp 我自己搜了一下搞定了,把 stderr redirect 到一个临时文件然后从文件中读取,为了保证 stderr 中仍然保留错误消息,再重新把读取的文件输出到 stderr 就可以了!谢拉,我已经更新了我的脚本。
sola97
2016-12-11 13:03:46 +08:00
遇到 QQ 邮箱这种系统拦截比域名信任还优先的
neilp
2016-12-11 15:03:36 +08:00
@eastonwyz

我发了一个 pr 给你.

https://github.com/EastonWang/mail-exec/pull/1

你自己看看吧.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/326677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX