at 命令突然/随机执行作业

at 命令突然/随机执行作业

at命令有一个奇怪的行为,我找不到原因。

故事 -三天后,我需要在特定时间发送电子邮件,给某人一个惊喜。我将无法监控一切是否正常运行,因为我将在飞机上待大约 20 个小时。一切都会完美运行。 :-)

脚本 -我正在使用该at命令对作业进行排队以供以后执行。我创建了一堆文件(每个邮件一个),格式如下:

mail1.txt 的内容(示例)

This is a subject
This is a message...
... on several lines

这是我的脚本:

#!/bin/bash

function sendit {
        FROM_MAIL="[email protected]"
        RCPT_MAIL="[email protected]"

        SUBJECT=$(head -n  1 $1)
        MESSAGE=$(tail -n +2 $1)

        echo -e "$MESSAGE" |mail -s "$SUBJECT" -r $FROM_MAIL $RCPT_MAIL
}

# Note, time is EDT, it correspond to the date of my server
sendit mail1.txt|at 02:37 May 03
sendit mail2.txt|at 02:38 May 03
sendit mail3.txt|at 03:13 May 03
[...]

然后我运行我的脚本:

$ bash script.sh
warning: commands will be executed using /bin/sh
job 35 at Tue May  3 02:37:00 2016
warning: commands will be executed using /bin/sh
job 36 at Tue May  3 02:38:00 2016
warning: commands will be executed using /bin/sh
job 37 at Tue May  3 03:13:00 2016
[...]

一切看起来都很完美,然而,当我几分钟后查看邮件时,我发现有些邮件已经发送了......(似乎是随机的)

任何想法?

答案1

|左侧进程的标准输出发送到右侧命令。您的 sendit 函数实际上发送了邮件,但不会在标准输出上产生太多输出(我实际上不记得 的输出是什么mail),因此输入at不是发送邮件的命令。

考虑一下作为用户,您通常会at这样使用:

at 02:37 May 03        # This will read commands from stdin until Ctrl/D
sendit mail1.txt
Ctrl/D

您还可以sendit通过编程方式将命令传送到at

echo 'sendit mail1.txt' | at 02:37 May 03

答案2

我想你的意思是echo sendit mail1.txt|at 02:37 May 03

相关内容