2013-09-30 41 views
0

我正在尝试编写一个bash脚本,该脚本在screen会话中执行命令,该会话在会话中显示命令的输出并在完成时通过电子邮件发送。然而,它并不总是工作,我不能解决原因。我已经蒸行为,下面的例子:如何从分离的GNU屏幕会话中发送命令的输出?

命令

ls | tee >(mail -s 'my subject' [email protected]) 

每次都工作正常,一样

bash -c "ls | tee >(mail -s 'my subject' [email protected])" 

但是,该命令只有

screen -dmS foo bash -c "ls | tee >(mail -s 'my subject' [email protected])" 

作品有时。

命令结构的原因是它在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' [email protected])"; done 

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

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

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

+0

如果在运行命令之间添加几秒钟的延迟,行为是否会改善? –

+0

不可以。当从命令行重复发出相同的命令时,在每个命令行之间等待几秒钟,发送电子邮件的可能性保持不变。 – starfry

回答

0

我看到这个问题被问了很久以前,但也许我的答案可以帮助找到这些网页的人(像我一样)。

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

screen -dm -S "testMail" bash -c "echo body | mutt -s subject [email protected]" 
相关问题