2015-04-22 43 views
0

我使用Linux操作系統。我想,當程序通過使用mutt完成計算機發電子郵件給我(學校不允許我們使用mail)。 我試過mutt,它工作正常。如何使用狗給我發通知,當程序完成

我用下面的shell腳本來運行程序

cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt;

我怎樣才能使它在程序完成後給我發送電子郵件。該電子郵件應該有 The job /home/program/K_10/program_1.R is finished。另外,如果有可能,你能幫我附上/home/program/K_10/program_1.txt,這是program_1.R的結果嗎? 我對Linux很有新意。

+0

通常使用'mail'命令發送郵件的方式。你是說你不允許使用'mail'命令,但是你仍然想發送郵件嗎? (Mutt是一個MUA,並不提供郵件。) –

+0

@GregHewgill你說得對。 IT人員告訴我,我只能使用'mutt'。 –

+0

@GregHewgill我認爲'mutt'可以發送郵件。 –

回答

0

所有你需要的是這樣的:

cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt; 
echo "The job /home/program/K_10/program_1.R is finished" |mutt "[email protected]" -s "Your job" 

是,在腳本首先執行的作業,然後(按順序)發送郵件到自己。 echo命令將其用作郵件內容的mutt。該-s選項設置郵件的主題

一個更好的方式來做到這將是把這些命令的要點爲腳本,這樣的事情:

#!/bin/sh 
cd $(dirname $1) && nohup Rscript $(basename $1) > $(basename $1 .R)_out.txt; 
echo "The job $1 is finished" |mutt "[email protected]" -s "Your job" 

和(調用該文件run-job),由

調用它
run-job /home/program/K_10/program_1.R 

其分解一點:

  • run-job被命名爲腳本的功能暗示。腳本名稱沒有設置約定(由開發者決定)。有些人在名稱上使用".sh"後綴以使其類型更加明顯,但這不是必需的。
  • ".R"後綴是另一個命名約定,也可以通過Rscript需要。無論如何,它是現有文件名的一部分。
  • $1是給予腳本的參數(或自變量)。更完整的腳本可能會檢查(a)參數是否存在,以及(b)參數是否與現有文件相對應,但這些步驟被省略以保持簡單。
  • $(dirname $1)回報/home/program/K_10,並
  • $(basename $1 .R)採用的是/home/program/K_10/program_1.R返回program_1
  • 對於這個簡單的腳本,有可能採取的路徑名部分,並用它們來做出更一般的腳本比使用文本命令。

nohup這裏很尷尬;我會將其移出腳本。然後,您可以直接控制腳本的運行方式,例如,

nohup run-job /home/program/K_10/program_1.R & 

創建腳本如run-job,你應該記住這樣做:

  • 使其可執行文件,例如,chmod u+x run-job
  • 要麼把腳本到一個目錄上您$PATH (如許多系統上的$HOME/bin),或者小心使用其路徑調用它。舉例來說,如果它是在當前目錄下,你可以簡單地做

    nohup ./run-job /home/program/K_10/program_1.R &

  • 爲分離的問題(無論是我的錯字,或其他原因),外殼提供了跟蹤功能(實際命令將在運行時打印)。要打開跟蹤,腳本的第一行更改爲

    #!/bin/sh -x

+0

據說'run-job:Command not found', –

+0

我把'run-job.sh'放在與'program_1.R'相同的文件夾中'但是它仍然無法工作,也許校園計算機不允許我編輯bash文件 –

+0

但是腳本*做了什麼*?(現在就去了) –

相關問題