最近在使用ansible shell模塊啟動一個shell編寫的腳本,該腳本主要功能式加載java的classpath並在后台運行這個java程序。
該腳本在linux shell中可以正常啟動和停止,但是使用ansible shell模塊卻每次都啟動后進程都消失了,日志沒有任何異常,pid文件也生成了。
后來經過一個同事的猜想,是否有程序將該進程kill掉了。
於是產生了以下幾種猜想:
1.ansible shell模塊執行完shell腳本,就立即關閉當前的shell,進程也就被關閉了。
ansible fork出來子線程來運行腳本,ansible正常退出時會結束所有fork的子線程因為程序啟動后被關閉.
嘗試解決: 給shell命令開頭加個nohup, 結尾加個&, 如果環境變量找不到,加入source ~/.bash_profile
例如:source ~/.bash_profile;nohup /apps/xxx/ss/start.sh &
參考:
Linux set命令參數及用法詳解 (https://www.cnblogs.com/liduanjun/p/3536996.html)
shell執行startup.sh無法啟動tmocat的問題 (https://segmentfault.com/q/1010000010375831)
ansible啟動tomcat失敗 (https://www.zhihu.com/question/52712638)
ansible在遠程機器將程序起在后台 (https://blog.csdn.net/cikenerd/article/details/54411633)
Ansible常用模塊:cron、synchronize、shell、service (https://blog.csdn.net/lcl_xiaowugui/article/details/81905324)
關於ansible遠程執行的環境變量問題(login shell & nonlogin shelll)(https://blog.csdn.net/u010871982/article/details/78525367)