【開源工具】sync-deploy命令工具:讓遠(yuǎn)程命令操作更簡單

【工具Github主頁】
該命令集可以非常方便地向遠(yuǎn)程主機(jī)/服務(wù)器上傳文件、運(yùn)行遠(yuǎn)程腳本、下載文件等。

目錄

目的

交互式地輸入ssh、scp命令進(jìn)行遠(yuǎn)端主機(jī)命令/腳本的執(zhí)行、文件的上傳與下載并不是很方便,有時候頻繁地鍵入hostname@ip也是一件非常痛苦的事情。另外一方面,如果是向計算平臺提交任務(wù)腳本,在遠(yuǎn)端文本命令窗口內(nèi)修改作業(yè)參數(shù)以及調(diào)試運(yùn)行腳本也是蠻不方便。所以倉庫里腳本是為了能夠比較方便地執(zhí)行這一些任務(wù)。

命令集內(nèi)置ssh、scp、qsub、qstat命令,分別用于運(yùn)行遠(yuǎn)程腳本、命令、上傳/下載文件、提交作業(yè)和查看作業(yè)狀態(tài)。

下載與使用

點(diǎn)擊下載

或克?。?/p>

git clone https://github.com/ShixiangWang/sync-deploy.git

下載后執(zhí)行add_path.sh腳本將命令添加到環(huán)境路徑中,這樣無論你處于什么目錄都能使用。

cd sync-deploy/src
./add_path.sh

除了sync-command命令沒有選項,其他命令基本都有選項需要指定。

對應(yīng)地,除了sync-command其他命令都有-h選項,你可以獲取幫助。

sync-upload -h
sync-download -h
sync-run -h
sync-deploy -h
sync-check -h

準(zhǔn)備與配置

首先在服務(wù)器端配置本地機(jī)器的公鑰,以便于實(shí)現(xiàn)無密碼文件傳輸。

參考文章ssh-keygen基本用法或其他資料生成公鑰和私鑰(搜索引擎可以找到一大堆這樣的博文,我就不啰嗦了)。

將公鑰id_sra.pub(本地機(jī)器.ssh子目錄下)中文本內(nèi)容拷貝到服務(wù)器.ssh子目錄中的authorized_keys中,放在已有文本后面。如果該文件不存在則創(chuàng)建。

進(jìn)行測試,如果不需要密碼登錄則成功。

然后點(diǎn)擊打開當(dāng)前目錄(src/)的sync-setting文件,將遠(yuǎn)程主機(jī)的host名與ip地址改為你自己的。


如果你想要在計算平臺部署任務(wù),請點(diǎn)擊打開當(dāng)前目錄下的qsub_header文件填入PBS參數(shù),設(shè)置可以參考我整理的或者百度上的其他資源,例如1,2等。

接著在當(dāng)前目錄的commands文件夾填入你要運(yùn)行的命令。如果你想要運(yùn)行其他腳本,請在該文件中調(diào)用執(zhí)行。

命令說明

sync-command

這個命令最簡單粗暴,直接在sync-command后接你想要在遠(yuǎn)端執(zhí)行的命令。

$ sync-command ls -l '~/test'
總用量 0
-rw-rw-r-- 1 liuxs liuxs  12 1月  30 19:20 job_id
-rw-rw-r-- 1 liuxs liuxs  34 1月  30 19:20 result.txt
-rw-rw-r-- 1 liuxs liuxs 110 1月  29 11:40 test.R
-rwxrw-r-- 1 liuxs liuxs 240 1月  30 19:20 work.sh

需要注意的是如果是想使用類似~這種映射到某個路徑的符號,需要添加引號,不然它會被解析為本地地址,那當(dāng)然會出問題的

sync-upload

上傳文件到遠(yuǎn)程主機(jī)。

用法:

    Usage: sync-upload -n local_files -d 'destdir'

-n選項后接你要上傳的(本地機(jī)器)文件/目錄路徑,-d選項接遠(yuǎn)程主機(jī)上的目錄路徑。

用法示例:

==> examples:
              sync-upload -n work.sh -d /public/home/liuxs/test
         or
              sync-upload -n work.sh -d '~/test'

同樣注意使用~時需要加引號。

重點(diǎn)注意不支持-n與-d倒過來寫,也就是選項是有順序的,為什么如此的原因是為了使-n選項后能夠接大于1個的路徑參數(shù),命令腳本內(nèi)部利用了-n-d的位置特點(diǎn)運(yùn)用正則表達(dá)式抓取所有路徑名,你可以利用該命令同時上傳不止一個文件/目錄(也算是有得有失吧)。

sync-download

從遠(yuǎn)程主機(jī)下載文件到本地機(jī)器。

用法:

    Usage: sync-download -n 'remote_files' -d localdir

這個命令的使用基本和sync-upload一致。

用法示例:

==> examples:
              sync-download -n '~/test/*' -d ./test
         or
              sync-download -n /public/home/liuxs/test/* -d ./test

同樣地,不支持-n-d選項順序反著寫。

sync-run

提交遠(yuǎn)程主機(jī)的作業(yè),內(nèi)置qsub命令向計算平臺提交任務(wù)腳本。如果只是想要運(yùn)行遠(yuǎn)程腳本或命令,請查看sync-command命令。

用法:

    sync-run -f work_script

-f選項后接你要運(yùn)行的一個腳本(需要指定腳本的路徑哈)。

用法示例:

    sync-run -f /home/wsx/work.sh

sync-deploy

上傳文件、提交作業(yè)一氣呵成。

該命令內(nèi)置調(diào)用sync-uploadsync-run這兩個命令,以及其他幾個腳本。在進(jìn)行相關(guān)配置后,它可以根據(jù)qsub_headercommands兩個文本自動生成作業(yè)腳本work.sh,上傳指定文檔(work.sh不指定也會上傳),然后提交到任務(wù)節(jié)點(diǎn)進(jìn)行運(yùn)算。

用法:

    Usage: sync-deploy -n local_files -d 'destdir'

同樣注意~的使用問題,另外,如果你只部署運(yùn)行work.sh文檔,那么請在-n選項后加work.sh,(因為-n選項后不加內(nèi)容會報錯)雖然該文本會被上傳兩次,但不會影響使用。

一個實(shí)例如下:

$ sync-deploy -n work.sh -d '~/test'
==> command used: scp -pr -P 22 work.sh /home/wsx/working/sync-deploy/src/work.sh liuxs@10.15.22.110:~/test
==>
work.sh                                                                                                         100%  240     0.2KB/s   00:00
work.sh                                                                                                         100%  240     0.2KB/s   00:00
==> Files upload successfully.

==> run as batch mode.......
job_id file locate at ~/test/job_id , id is
87728.node1
==>
==> The work deploy successfully.

sync-check

用來查看作業(yè)狀態(tài)。

用法:

    Usage: sync-deploy -n id

如果指定-n選項加上作業(yè)號,會查詢指定的作業(yè)狀態(tài),如果不指定,會查看所有的作業(yè)狀態(tài)。

任務(wù)部署后會返回作業(yè)號,剛提交了兩個作業(yè),我們來查一查。

$ sync-check -n 87730
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
87730.node1                work.sh          liuxs           00:00:00 C normal_3

$ sync-check -n 87730.node1
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
87730.node1                work.sh          liuxs           00:00:00 C normal_3

$ sync-check
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
87729.node1                work.sh          liuxs           00:00:00 C normal_3
87730.node1                work.sh          liuxs           00:00:00 C normal_3

計算操作實(shí)例

我們來通過一個完整的實(shí)例來了解這些命令。

我們的任務(wù)是利用遠(yuǎn)程的計算平臺運(yùn)行一些shell命令,執(zhí)行一個R腳本。

該R腳本位于src/test目錄下,這個腳本我們可以看做我們?nèi)粘9ぷ鬟\(yùn)行的主腳本。

我們需要準(zhǔn)備什么呢?

只需要正確填寫qsub_headercommands文檔即可。

我們先看看qsub_header的內(nèi)容:

#PBS -l nodes=1:ppn=10
#PBS -S /bin/bash
#PBS -j oe
#PBS -q normal_3

# Please set PBS arguments above

上述就是一些PBS選項和參數(shù),按你自己的需求和正確寫法填寫即可。這里測試我就簡單地設(shè)定了節(jié)點(diǎn)與隊列。具體參數(shù)你可以百度或者參考說明文檔前面提供的信息。

再瞧瞧commands文檔:

# This job's working directory
cd ~/test

# Following are commands
sleep 20
echo "Thi mission is run successfully!!" > ~/test/result.txt

# call Rscripts
Rscript ~/test/test.R > ~/test/result2.txt

這個文檔可能是我們工作主要需要修改的地方,這里我們用cd命令設(shè)定(作業(yè)的)工作目錄,為避免任務(wù)結(jié)束太快,調(diào)用sleep命令讓機(jī)器睡幾秒,然后調(diào)用echo將一些文字結(jié)果傳入一個結(jié)果文件,最后調(diào)用一個R腳本,并將結(jié)果傳入另一個文件。

R腳本的內(nèi)容也非常簡單,就是輸入幾行文本:

print("==>")
print("==> Hello world!!!!!!!!")
print("==> ")

為避免程序找不到或者找錯文件,我們最好指定文件所在的全部路徑。

讓我們開始跑命令吧~

任務(wù)方案很簡單,我們將test.R上傳到遠(yuǎn)程主機(jī)的工作目錄下,注意,work.sh也會自動生成并上傳,它的內(nèi)容就是qsub_headercommands的結(jié)合體。然后執(zhí)行work.sh文本,然后將輸出結(jié)果傳回來。

上傳與運(yùn)行可以利用sync-deploy命令一步搞定:

# 利用add_path.sh將命令加入環(huán)境路徑后,我們可以利用tab補(bǔ)全查找命令
wsx@Desktop-berry:~$ sync-
sync-check     sync-command   sync-deploy    sync-download  sync-run       sync-upload

# 利用sync-command查看目標(biāo)路徑情況
wsx@Desktop-berry:~$ sync-command "ls -al  ~/test"
總用量 8
drwxrwxr-x  2 liuxs liuxs 4096 1月  30 23:52 .
drwx------ 10 liuxs liuxs 4096 1月  30 22:51 ..

# 部署任務(wù)到遠(yuǎn)程

wsx@Desktop-berry:~$ sync-deploy -n ~/working/sync-deploy/src/test/test.R -d '~/test/'
==> command used: scp -pr -P 22 /home/wsx/working/sync-deploy/src/test/test.R /home/wsx/working/sync-deploy/src/work.sh liuxs@10.15.22.110:~/test/
==>
test.R                                                                                                          100%   60     0.1KB/s   00:00
work.sh                                                                                                         100%  300     0.3KB/s   00:00
==> Files upload successfully.

==> run as batch mode.......
job_id file locate at ~/test/job_id , id is
87732.node1
==>
==> The work deploy successfully.

可以看到任務(wù)成功部署并返回了job id,利用sync-check命令查詢

wsx@Desktop-berry:~$ sync-check 87732
Job ID                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
87732.node1                work.sh          liuxs           00:00:00 C normal_3

因為任務(wù)時間不長,很快就搞定了,已經(jīng)出現(xiàn)了C標(biāo)志(完成)。

我們查看一下遠(yuǎn)程目錄情況:

wsx@Desktop-berry:~$ sync-command ls '~/test'
job_id
result2.txt
result.txt
test.R
work.sh

job_id文件是用來保存作業(yè)號信息的,就是前面輸出的87732.node1。其他不用解釋了。

最后一步,將需要的結(jié)果下載回本地。

我們創(chuàng)建一個臨時目錄單獨(dú)存儲,然后查看文件內(nèi)容:

wsx@Desktop-berry:~$ mkdir test
wsx@Desktop-berry:~$ sync-download -n "~/test/*" -d ~/test
==> command used: scp -pr -P 22 liuxs@10.15.22.110:~/test/* /home/wsx/test
==>
job_id                                                                                                          100%   12     0.0KB/s   00:00
result2.txt                                                                                                     100%   51     0.1KB/s   00:00
result.txt                                                                                                      100%   34     0.0KB/s   00:00
test.R                                                                                                          100%   60     0.1KB/s   00:00
work.sh                                                                                                         100%  300     0.3KB/s   00:00
==> Files download successfully.

wsx@Desktop-berry:~$ cd test/
wsx@Desktop-berry:~/test$ ls
job_id  result2.txt  result.txt  test.R  work.sh
wsx@Desktop-berry:~/test$ cat result.txt
Thi mission is run successfully!!
wsx@Desktop-berry:~/test$ cat result2.txt
[1] "==>"
[1] "==> Hello world!!!!!!!!"
[1] "==> "

任務(wù)完成!

問題

有問題歡迎提交issue進(jìn)行討論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,199評論 2 33
  • win7 cmd管理員權(quán)限設(shè)置 net localgroup administrators 用戶名 /add 把“...
    f675b1a02698閱讀 5,508評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 部分內(nèi)容轉(zhuǎn)載自搜狗百科 cmd是command的縮寫.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上閱讀 2,488評論 0 24
  • 好女不嫁建筑郎, 一年四季守空房。 一旦有空回了家, 愛撫沒有睡覺忙。 妻對吟 妻女嫁于建筑郎, 一年四季多空房。...
    荷靜閱讀 313評論 7 16

友情鏈接更多精彩內(nèi)容