我正在尝试编写一个 bash
脚本,该脚本在 screen
session 中执行命令,在 session 中显示命令的输出,并在完成后通过电子邮件发送。然而,它并不总是有效,我也不知道为什么。我已将行为提炼为以下示例:
命令
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
session 中启动脚本(用户可以重新连接以实时查看脚本的输出),并在脚本完成后通过电子邮件发送输出。我已将示例中的脚本替换为 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 有关,但我不确定问题是什么。
可以采取什么措施来实现这一目标?
最佳答案
我发现这个问题很久以前就被问过,但也许我的答案可以帮助那些找到这些页面寻找答案的人(比如我)。
我遇到了同样的问题,只是我从未从使用 -dmS 作为守护进程运行的独立 screen session 中使用 mail
命令收到任何邮件。 mutt 命令与 mail 命令非常相似,很难解决我的问题。以下是我从分离 screen 发送邮件的方法:
screen -dm -S "testMail" bash -c "echo body | mutt -s subject me@example.com"
关于linux - 如何从独立的 GNU screen session 中邮寄命令的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19095897/