ansible学习系列之顺利启动后台程序
文章目錄
- ansible系列文章
- 場景
- 環境
- 原因
- 嘗試
- 添加`nohup`指令
- `source`環境變量
- 結果
- 總結
- 參考鏈接
- 隨緣求贊
ansible系列文章
ansible學習系列之tags的使用
ansible學習系列之順利啟動后臺程序
ansible學習系列之make模塊的使用
ansible學習系列之become的使用
ansible學習系列之lineinfile模塊的使用
場景
最近在編寫ansible腳本,需要啟動java后臺程序,啟動腳本如下:
cd /data/adapter java -Dadapter -Xms512M -Xmx12G -classpath .:./conf:./lib/* StartAdapter >./log/run-adapter.log 2>./log/err-adapter.log &不使用ansible進行批量啟動的話,只在本地啟動是可以正常啟動的。但是使用ansible執行批量啟動的話,啟動過程未報錯,但是到后臺程序的日志查看,日志大小為空,使用ps -ef|grep Dadapter是找不到對應的程序的。
環境
| Ansible | 2.9.4 |
| Python | 2.7.5 |
| Centos | 7 |
原因
按照ansible官方的回答,是因為每個任務都基于SSH運行,并且基于為該會話創建的終端。父進程完成后,終端關閉,這意味著與該終端關聯的所有其他進程也被殺死了。 這屬于SSH會話的標準做法。這是原文的鏈接地址 issues-33410,有興趣的小伙伴可以打開鏈接進去看看。其實,我覺得可能是ansible的做法有點奇怪,和我們正常的操作有點不同。如果按照官方的回答,我們在平時ssh到服務器,在上面啟動程序之后,退出之后,程序應該也會被關閉。但是,真實情況是沒有出現這種情況。所以,在issues-33410也有人提出了這個問題,不過沒有得到官方的回復。
嘗試
添加nohup指令
按照官方回答,我在啟動腳本上面,添加了nohup指令,修正后為以下腳本:
cd /data/adapter nohup java -Dadapter -Xms512M -Xmx12G -classpath .:./conf:./lib/* StartAdapter >./log/run-adapter.log 2>./log/err-adapter.log &在筆者的環境里面,是部署了3臺機器。在未添加nohup指令的時候,一個程序都沒有正常啟動起來。添加了之后,有2個程序正常啟動,而有一個機器的程序沒有啟動起來。
source環境變量
使用ansible遠程執行shell命令的時候,會存在環境變量的加載順序的問題。ansible執行是使用non-login shell,只是會加載/.bashrc和/etc/bashrc,而不會加載/etc/profile和~/.bash_profile。所以我們使用指定用戶執行的時候,如果有部分軟件的環境變量是設置在/etc/profile和~/.bash_profile,那么就需要顯示地引入才可以正常啟動。比如,我上一步沒有順利啟動的程序環境,是需要jdk環境,而是單獨設置在~/.bash_profile,所以默認環境變量沒有引入~/.bash_profile,導致啟動失敗。所以加入了環境變量啟動的環節,修正的版本如下:
source ~/.bash_profile cd /data/adapter nohup java -Dadapter -Xms512M -Xmx12G -classpath .:./conf:./lib/* StartAdapter >./log/run-adapter.log 2>./log/err-adapter.log &重新部署啟動,最后結果是發現全部都啟動成功了。
結果
通過添加了nohup命令和source ~/.bash_profile之后,后臺程序順利啟動。
總結
使用開源軟件進行開發的時候,遇到的問題及時記錄下來,并找到解決的問題。這樣日積月累,對自己解決問題的能力是很大的提升。
參考鏈接
關于ansible遠程執行的環境變量問題(login shell & nonlogin shelll)
issues-33410
隨緣求贊
如果我的文章對大家產生了幫忙,可以在文章底部點個贊或者收藏;
如果有好的討論,可以留言;
如果想繼續查看我以后的文章,可以左上角點擊關注
總結
以上是生活随笔為你收集整理的ansible学习系列之顺利启动后台程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android的发音功能实现,为Andr
- 下一篇: arcgis api 4.x 实现动态测