0

我正在尝试编写一个在会话bash中执行命令的脚本,该脚本在screen会话中显示命令的输出,并在完成后通过电子邮件发送它。但是,它并不总是有效,我不知道为什么。我已将行为提炼为以下示例:

命令

ls | tee >(mail -s 'my subject' me@example.co.uk)

每次都能正常工作,就像

bash -c "ls | tee >(mail -s 'my subject' me@example.co.uk)"

然而,命令

screen -dmS foo bash -c "ls | tee >(mail -s 'my subject' me@example.co.uk)"

仅有时有效。

命令结构的原因是它在 cron-job 中用于在分离的screen会话中启动脚本(用户可以重新附加以实时查看脚本的输出)以及在脚本完成后通过电子邮件发送输出。ls我已经用示例中的脚本替换了脚本来测试和演示问题。

tail -f /var/log/mail.log用来观看正在发送的邮件。我执行了screen十次命令,只发送了两封邮件。为了更难测试,我这样做了:

for i in {1..100}; do screen -dmS test_$i bash -c "ls | tee >(mail -s 'screen test $i' me@example.co.uk)"; done

这导致发送了 100 封邮件中的 39 封。

这最初是在 OSX 上完成的,但我也在 Linux 机器上进行了测试,并看到了类似的行为。我认为这与子壳有关,screen但我不确定问题是什么。

可以做些什么来完成这项工作?

4

1 回答 1

0

我看到很久以前有人问过这个问题,但也许我的回答可以帮助找到这些页面的人(比如我)。

我遇到了同样的问题,只是我从来没有mail从带有-dmS 的作为守护进程运行的分离屏幕会话中收到任何带有命令的邮件。mutt与邮件命令非常相似的命令很难解决我的问题。这是我从分离的屏幕发送邮件的方式:

screen -dm -S "testMail" bash -c "echo body | mutt -s subject me@example.com"
于 2016-06-07T07:11:47.830 回答