Environment-Variables

gammu 1.42,gammu-smsd 服務錯誤,找不到 LD_LIBRARY_PATH

  • October 25, 2020

我正在嘗試安裝 Gammu 1.42 以在 Centos 8 上為我的 SMS 網關提供服務。

製作,製作測試,製作安裝工作正常。

LD_LIBRARY_PATH 在 /etc/profile 中配置為:

......
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:.:/usr/local/lib64
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL LD_LIBRARY_PATH
......

我通過 printenv 列印 env,找到了 LD_LIBRARY_PATH。/etc/gammu-smsdrc 配置為:

......
[gammu]
device = /dev/ttyUSB0
model = E3131
connection = at115200

[smsd]
service = sql
driver = native_pgsql
logFIle = /var/log/gammu/smsd.log
logFormat = errorsdate
Host = xx.0.1.xx:xxxx
user = xxxx
password = xxxxx
database = xxxxx
debuglevel = 2
StatusFrequency = 60
LoopSleep = 60
DeliveryReport = sms
PhoneID = ozssc-smsd
SMSC = +614xxxxxxxx
BackendRetries = 60

我嘗試在終端中啟動 gammu 命令行,它工作正常。但是當我嘗試使用 systemctl 啟動系統服務時,它失敗了。

錯誤查詢結果為:

[root@Centos8Gateway etc]# systemctl status gammu-smsd.service
● gammu-smsd.service - SMS daemon for Gammu
 Loaded: loaded (/usr/lib/systemd/system/gammu-smsd.service; disabled; vendor preset: disabled)
 Active: failed (Result: exit-code) since Sun 2020-10-25 12:13:42 AEDT; 19s ago
    Docs: man:gammu-smsd(1)
 Process: 23247 ExecStopPost=/bin/rm -f /var/run/gammu-smsd.pid (code=exited, status=0/SUCCESS)
 Process: 23245 ExecStart=/usr/local/bin/gammu-smsd --pid=/var/run/gammu-smsd.pid --daemon (code=exited, status=127)

Oct 25 12:13:42 Centos8Gateway systemd[1]: Starting SMS daemon for Gammu...
Oct 25 12:13:42 Centos8Gateway gammu-smsd[23245]: /usr/local/bin/gammu-smsd: error while loading shared libraries: libgsmsd.so.8: cannot open shared object file: No such file or directory
Oct 25 12:13:42 Centos8Gateway systemd[1]: gammu-smsd.service: Control process exited, code=exited status=127
Oct 25 12:13:42 Centos8Gateway systemd[1]: gammu-smsd.service: Failed with result 'exit-code'.
Oct 25 12:13:42 Centos8Gateway systemd[1]: Failed to start SMS daemon for Gammu.
[root@Centos8Gateway etc]# 

我試圖找出為什麼 Centos 8 系統服務載入器不使用配置的系統環境變數?並且不提供命令行 LD lib 路徑參數。

我錯過了什麼?請指教!

還有另一種解決此問題的方法:

  1. 在 /etc/ld.so.conf.d 下添加一個新文件為 gammu-smsd-1.42.0-x86_64.conf ,其中只有一行:

/usr/local/lib64 2. 然後由 root 使用者執行 ldconfig。

重試從 systemctl 啟動 gammu-smsd 完成。

/etc/profile被 bash 等 shell 使用;它不用於為 systemd 服務設置環境。

要為 systemd 服務提供環境變數,請在 systemd 單元文件中使用Environment= `,例如:

Environment="LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64"

請注意,我已省略$LD_LIBRARY_PATH.與您的內容進行了比較/etc/profile

  1. 預設情況下,該變數通常為空,並且為了清晰和明確的期望,systemd 單元文件中對這樣一個重要變數的任何定義都應該是完全明確的。
  2. .有點不尋常;在 systemd 單元的上下文中,它將是您已經知道/應該知道的WorkingDirectory的值,在這種情況下,您可以再次明確地擴展它,以便清楚和明確的期望。

引用自:https://serverfault.com/questions/1039983