shell腳本異常處理
Ⅰ jenkins上使用shell腳本nohup部署jar服務到remote伺服器
先貼一下,我的jenkins里最後核心配置
remove_jar.sh腳本:
start_jar.sh腳本內容:
remove_jar.sh 和 start_jar.sh 在jenkins伺服器上,需要將這兩個shell在0.0.0.0(不能暴露)的遠端去執行
沒錯,客官您一眼就看出來了派行,覺得簡單的不值一提吧,先別著急,對搜這個問題的滑歲小菜雞來說這裡面也是大有文章,聽我一一道來。
1、第一個問題:ps -ef|grep xxx.jar查到多餘的pid
現象:在0.0.0.0上行 ps -ef | grep alk-wxapi-test.jar | grep -v grep | awk '{print $2}' 只能查到一個pid,但是把這句話放到shell腳本里,在本地使用命令上遠端執行,就會找到3個pid,而且kill 時提示失敗的錯誤。
現在已經知道原因了,但是當時確實是個問題。
已經解決不方便復現了,因此就描述一下就行了。
原因:shell里的這個命令也是通過bash在遠程執行的,所以找到的別的 無關緊要 的pid其實是bash,因此在grep是除了排除grep本身( grep -v grep )外還要排除bash( grep -v bash )
最後命令是:
2、遠程執行腳本,裡面有nohup java -jar,發生錯誤: nohup: failed to run command 『java』: No such file or directory
這是因為nohup時java環境變數沒有讀到,處理方式就是在nohup執行前加入
3、其他思路
4、第二條說jdk的路徑因為每個服務企業都不一樣,所以需要手動傳改,這一點已經在腳本上做了修改,啟動腳本上信羨睜攜帶的第一個參數就是jdk的安裝路徑
這兩個也都是比較好的思路,以後肯定有機會體驗的,本篇到此。
ps -ef |grep -v 在shell sh 腳本中貌似無效?
linux下搭建zookeeper集群遇到的坑
nohup: cannot run command異常解決
Zookeeper not starting, nohup error
Ⅱ jenkins執行shell腳本,使用scp免密傳輸失敗問題
問題:Jenkins默認使用jenkins用戶去啟動,jenkins用戶並沒有許可權去執行ssh免沒巧襪密登陸,所以導致執行失敗
註:配置linux雙機互信後,jenkins也需要將公鑰加入到目標機器,才能達到shell腳本中scp免密傳輸的條件
一、驗證登錄
1、切換jenkins用戶
# su jenkins
切換後還是root賬號
2、分析解決:
2.1 應該枯激是/etc/passwd文件中的/bin/bash被yum安裝的時候變成了/bin/false
# vim /etc/passwd
jenkins:x:990:988:Jenkins Automation Server:/var/lib/jenkins:/bin/false( bash)
將bin/false改為/bin/bash
再次執行切換
# su jenkins
bash-4.1$
2.2 結果命令提示符的用戶名不是jenkins而變成了 bash-4.1$,原因是在安裝jenkins時,jenkins只是創建了jenkins用戶,並沒有為其創建home目錄
# vim ~/.bash_profile
在文件的最後添加 export PS1='[\u@\h \W]\$',執行文件使修改項起作用
# source ~/.bash_profile
驗證是否成功 # su jenkins
二、為jenkins系統用戶開啟免密登錄
1、在Jenkins的使用過程中,如果在腳本中使用到sudo命令,有可能出現如下所示的錯誤:
sudo: no tty present and no askpass program specified
這是因為Jenkins伺服器在執行sudo命令時的上下文有誤,導致這個命令執行的異常。
2.1 解決方法:
# sudo visudo
在文件末尾加上jenkins ALL=(ALL) NOPASSWD: ALL
2.2 重啟jenkins,測試
# su jenkins
# sudo su -s /bin/bash jenkins
測試成功,jenkins免密登錄成功。
PS:如果誤操作修改了/etc/sudoers的許可權來修改上述文件,則會導致如下所示的錯誤:
sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin
這是Linux的一種保護機制。因此,如果出現上述誤操作,則需要執行如下命令來解決:
$ pkexec chmod 0440 /etc/sudoers
三、jenkins用戶開通ssh免密登錄
1、安裝ssh
# yum install ssh
1.1 將ssh服務設置開機自啟寬猛
# sudo systemctl enable sshd
1.2 啟動ssh
# sudo systemctl start sshd
2、生成jenkins用戶秘鑰證書
# su jenkins
# ssh-keygen -t rsa
2.1 查看是否生成成功
# /var/lib/jenkins/.ssh/
# ls
3、將公鑰傳輸到目標linux系統
ssh--id -i /var/lib/jenkins/.ssh/id_rsa.pub root@目標ip:path
------------------------------------------------------------------------------------------
參考:https://blog.csdn.net/weixin_43840640/article/details/90371472