最近想給公司的服務器安裝一個 Matlab 試一下, 因此寫這篇博客把主要過程記錄下來。
安裝
我是通過 xshell 遠程連接的服務器, 然後通過 xftp 新建了一個 Softwares 文件夾, 並通過 xftp 把 Matlab 的鏡像文件上傳到了服務器上,也就是在 Softwares 文件夾裏面,文件名是 R2014b_glnxa64_withcrack.iso. 之後就可以開始安裝了.
安裝過程可以參考:http://www.aichengxu.com/view/39100 和 http://blog.csdn.net/johnnyconstantine/article/details/44943639 以及 http://www.ilovematlab.cn/thread-315642-1-1.html。
我是先在 Softwares 目錄下新建了一個 matlab 的空文件夾,然後把鏡像掛載到這個目錄中, 之後在命令行中進入這個目錄。 然後先參考這個帖子:http://www.ilovematlab.cn/thread-315642-1-1.html 進行的安裝(畢竟這個帖子的安裝步驟看着最短),安裝好之後需要啓動和激活。
如果直接進行啓動的話,命令可參考:http://blog.csdn.net/johnnyconstantine/article/details/44943639,其實就是執行:
sudo /usr/local/MATLAB/R2014b/bin/matlab
但由於還沒有激活,因此會失敗,提示讓我們激活。激活的話,我是參考的這個:http://www.aichengxu.com/view/39100。
激活之後執行啓動命令就成功了,但是爲了啓動的方便,我們需要添加環境變量,即打開 /etc/profile 文件,添加以下語句即可。
export PATH=$PATH:/usr/local/MATLAB/R2014b/bin
然後輸入matlab就可以啓動了。
基本使用
這裏直接上個圖
值得注意的是,在哪個目錄啓動的Matlab,那麼啓動後的默認工作目錄就在哪裏(可以使用命令 pwd 查看)。
啓動後,直接輸入命令或者程序名就可以運行程序了
如果想退出,直接輸入 quit 就可以了,其實跟普通平臺是一樣的。
腳本執行
如果想在命令行裏直接執行腳本的話,比如上面的簡單求和腳本,如下
n = 10000;
tic % 程序計時開始
s = 0;
i = 0;
for i = 1:n
s = s + i;
end
t = toc; %程序計時結束
disp(['1到', num2str(n), '的累加和爲: ', num2str(s)]);
disp(['求解所用的時間爲', num2str(t), 's']);
quit()
我最後加了一個 quit() 命令,是讓程序執行完畢後直接退出 Matlab 環境,當然,也可以參考 http://qa.helplib.com/907066 ,也就是在最後面加上 exitcode = 0;. 運行時直接執行如下語句即可
matlab -r simplesum
其中 simplesum 是程序文件名,同樣不需要加 .m 後綴。
腳本傳參
當然,我們還希望能夠像 Python 和 R 語言一樣, 能夠傳遞程序參數,這個可以參考 http://blog.sina.com.cn/s/blog_6595ee0601018omx.html ,第一種方式比較簡單易行,比如上面的求和程序改爲
% 簡單求和程序
% 需要傳遞參數 n
tic % 程序計時開始
s = 0;
i = 0;
for i = 1:n
s = s + i;
end
t = toc; %程序計時結束
disp(['1到', num2str(n), '的累加和爲: ', num2str(s)]);
disp(['求解所用的時間爲', num2str(t), 's']);
quit()
然後執行如下語句即可
matlab -r "n = 100; simplesum"
後臺運行Matlab 腳本
如果程序需要執行的時間很長,我們希望利用服務器在後臺一直運行我們的程序,同Python 和 R 語言一樣,這隻要使用 nohup 命令就可以了,也可參考 http://blog.sina.com.cn/s/blog_67f37e760102uxs5.html。 比如我上面編寫的那個小程序,直接使用如下命令即可
nohup matlab -r simplesum &
如果有輸出,輸出結果會存到 nohup.out 文件中,比如上面的輸出就是
可以看到,這與在後臺執行 Python 和 R 腳本是幾乎一模一樣的。
至於如何像 Python 和 R 那樣, 讓Matlab 程序執行結束後自動給我們發一個帶程序運行結果的郵件,有時間我會研究一下並更新。
用 Matlab 發送郵件
下面更新一下如何發送郵件,其實網上資料很多,以163郵箱爲例,我最終參考的模板如下
% 發送郵件
MyMailAddress = '*********@163.com'; % 發送郵件所用的郵箱的地址
MyPassword = '****************'; % 發送郵箱的密碼
setpref('Internet','E_mail',MyMailAddress);
setpref('Internet','SMTP_Server','smtp.163.com');
setpref('Internet','SMTP_Username',MyMailAddress);
setpref('Internet','SMTP_Password',MyPassword);
props = java.lang.System.getProperties;
props.setProperty('mail.smtp.auth','true');
subject = '***程序執行狀態報告'; % 發送的郵件主題
content = 'Hello, 您的程序已經運行結束,運行結果可見附件'; % 發送的郵件內容
sendmail('******@qq.com',subject,content,{'line.pdf', 'Result.txt'}) % 設置需要接收的郵箱及主題、內容、附件等
% disp('Succesfull');
quit()
注意想要添加附件時,直接寫在 sendmail函數裏面就行了(可參考 http://cn.mathworks.com/help/matlab/import_export/sending-email.html ),默認文件目錄是與該程序在同一文件夾下的,這個就比較方便了。