At

at 命令突然/隨機執行作業

  • May 3, 2016

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

**故事 -**在 3 天內,我需要在特定時間發送電子郵件給某人一個驚喜。我將無法監控一切是否正常執行,因為我將在飛機上待大約 20 個小時。一切都會完美執行。:-)

**腳本 -**我正在使用該at命令對作業進行排隊以供以後執行。我創建了一堆文件(每封郵件一個),格式如下:

mail1.txt 的內容(範例)

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

這是我的腳本:

#!/bin/bash

function sendit {
       FROM_MAIL="mail-that-will-send@domain.com"
       RCPT_MAIL="my-email-to-test@domain.com"

       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
[...]

一切似乎都很完美,然而,當我在幾分鐘後檢查我的郵件時,我看到一些郵件已經發送……(似乎是隨機的)

任何的想法?

|左側程序的標準輸出發送到右側命令。您的 sendit 函式實際上發送了郵件,但不會在 stdout 上產生太多輸出(我實際上不記得輸出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

引用自:https://unix.stackexchange.com/questions/280736