2017-08-23 77 views
0

我有一些腳本需要按順序在遠程實例上執行。如何將命令行腳本包裝到./sh文件中

  1. cd /srv/wildfly-10.1.0.Final/bin
  2. sudo -s
  3. source /etc/profile
  4. ./jboss-cli.sh --connect command=:shutdown

我怎樣才能使之成爲一個sh文件,所以我可以ssh到遠程EC2實例和運行像 ssh -i my-private-key [email protected] '/scripts/backup.sh'

另外,我應該在哪裏放置./sh文件?當我自己登錄時,我從根文件夾運行該命令。現在我需要讓Jenkins遠程登錄到該實例並像我一樣運行shell腳本。

我該怎麼做?謝謝。我不知道.sh文件是什麼以及如何運行它,更不用說如何在我的EC2實例中使用Jenkins ssh併爲我運行這些命令。

+0

這裏最大的問題是你的腳本的其餘部分在'sudo -s'退出之前不會運行。 –

+0

順便說一句,你真的需要'/ etc/profile'還是'.bashrc'和類似的腳本,由'sudo -s'啓動的交互式shell運行?如果沒有它們,您將擁有更可靠的腳本(如果用戶的點文件的詳細信息發生更改,則不太可能發生中斷)。 –

回答

0

SSH可以遠程運行您的腳本;您可以將多個腳本語句放在一個.sh文件中,您的用戶帳戶有權訪問和執行,並且SSH應該可以運行它。

瞭解腳本:http://freeos.com/guides/lsst/ch08.html

+0

['bash'標籤wiki](https://stackoverflow.com/tags/bash/info)有一長串推薦參考文獻。我們不需要在主題中的任何位置放置更多的答案(如果某個問題*要求提供更多參考資料,這將成爲無關緊要的問題;請參閱「有些問題仍然存在問題」中的#4)列表在https://stackoverflow.com/help/on-topic)。 –

+0

(另外,'sudo -s' *不會按照這種方式在腳本中運行時執行OP所希望的操作)。 –

0

把這些命令放到一個腳本可能看起來像:那我們不使用sudo -s(這是交互使用

#!/bin/sh 
cd /srv/wildfly-10.1.0.Final/bin || exit 
sudo bash -lic '. /etc/profile; exec ./jboss-cli.sh --connect command=:shutdown' 

注意,並開始一個新和單獨的 shell),因爲如果我們這樣做了,那麼腳本中的將來行不會運行,直到退出新的單獨的shell爲止。相反,我們使用sudo-l(指定登錄shell)和-i(指定交互式shell)調用bash。這是說謊,你通常不應該在腳本中做 - 這將有助於某事的唯一原因是,如果你有一些根目錄的dotfiles,你的腳本需要執行,更好的答案是明確地把任何在腳本中直接需要邏輯/設置。

相關問題