背景
今天一早過來,企業微信上就收到一個前端同學發來的問好,順帶給我貼了一個bug,為什麼mit環境登入不上去了?
瞬間,我想起來mit環境3台機器為了調試一個功能,都給停掉了,也導緻了上面websocket登入不上(PS:android和ios是通過自己開發的負載均衡服務擷取動态IP位址登入的,是以不受影響。而web是通過nginx+域名的方式,域名映射的3台機器都停了,肯定就登入不上了。)
趕快掏出自己搭建的jenkins利器,一鍵部署N台機器,簡直不要太爽:
CICD實戰——使用Jenkins實作自動化部署和環境隔離
PS:jenkins的工作原理大概如上圖,每次建構都先從github/gitlab拉一份代碼,編譯後(自己寫腳本)就可以分發到需要部署的多台機器上部署(自己寫腳本控制)。
1.點選建構
2.檢視控制台結果
我發現一切都正常,但是程序就是沒起來,怎麼回事?
[[email protected] webapps]# ls
online.base.immsgserver.service online.base.immsgserver.service.202006026
于是,我手動執行了一下:
為什麼找不到 libdb-4.7.so?
[[email protected] msg_server]# whereis libdb-4.7.so
libdb-4.7:[[email protected] msg_server]#
[[email protected] msg_server]# whereis libdb-5.3.so
libdb-5.3: /usr/lib64/libdb-5.3.so
原因
為了查明原因,我用ldd看了一下依賴:
不能運作的機器:
運作良好的機器:
這是為什麼?
最終,花了 1個多小時,我發現在 build.sh 腳本裡面是直接使用之前編譯好的log4cxx.so,而不是每次重新編譯log4cxx。
copy_libs(){
# lib
# 解決jekins釋出job編譯過長問題,故提前編譯好protobuf、log4cxx、hiredis等,節約時間
cp ${CUR_DIR}/lib/linux/* ${CUR_DIR}/lib/
}
是以,重新編譯一下log4cxx即可。ldd看一下編譯好的:
[[email protected] linux]# ldd liblog4cxx.so
linux-vdso.so.1 => (0x00007ffd36155000)
libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0 (0x00007f8597d0b000)
libldap_r-2.4.so.2 => /usr/lib64/libldap_r-2.4.so.2 (0x00007f8597aab000)
liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007f859789c000)
libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007f8597672000)
libdb-5.3.so => /usr/lib64/libdb-5.3.so (0x00007f85972b2000)
總結
是以,為什麼Linux程式員都喜歡編譯依賴庫的源碼呢?我認為其中一個原因就是可以避免因為環境不一緻而帶來一些依賴庫not found的問題。
附錄
1.ldd指令檢視依賴
ldd msg_server
linux-vdso.so.1 => (0x00007fff3d4fc000)
libslog.so => ./libslog.so (0x00007fad6a9be000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fad6a555000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fad6a339000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007fad6a0c7000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fad69dbd000)
libm.so.6 => /lib64/libm.so.6 (0x00007fad69abb000)
2.ldd 隻顯示 not found:
輸出
libdb-4.7.so => not found
3.objdump 反彙編檢視缺失依賴庫
objdump -x liblog4cxx.so|grep NEEDED
輸出
[[email protected] msg_server]# objdump -x liblog4cxx.so|grep NEEDED
NEEDED libaprutil-1.so.0
NEEDED libldap-2.4.so.2
NEEDED liblber-2.4.so.2
NEEDED libexpat.so.1
NEEDED libdb-4.7.so
NEEDED libapr-1.so.0
NEEDED libpthread.so.0
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libc.so.6
NEEDED libgcc_s.so.1