At
at 命令突然/隨機執行作業
該
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 上產生太多輸出(我實際上不記得輸出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