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