【问题标题】:How can I mail a command's output from within a detached GNU screen session?如何从分离的 GNU 屏幕会话中邮寄命令的输出?
【发布时间】:2013-10-06 09:58:03
【问题描述】:

我正在尝试编写一个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 作业中用于在分离的 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 中的子shell 有关,但我不确定问题出在哪里。

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

【问题讨论】:

  • 如果在运行命令之间添加几秒钟的延迟,行为会改善吗?
  • 没有。从命令行重复发出相同的命令时,每次之间等待几秒钟,发送电子邮件的概率保持不变。

标签: linux macos bash gnu-screen subshell


【解决方案1】:

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

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

screen -dm -S "testMail" bash -c "echo body | mutt -s subject me@example.com"

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2012-06-25
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多