CentOS 7で正常に実行されるsystemdサービスがCentOS 8で実行されないのはなぜですか?

CentOS 7で正常に実行されるsystemdサービスがCentOS 8で実行されないのはなぜですか?

CentOS 7からCentOS 8にサーバーを更新しました。

UDPおよびTCPプロトコルを使用するストリーミングサーバーがあります。私は港を許可します。一言で言えばすごいシステム制御

  • サービス名:mytt.service

CentOS 7で実行される設定:

# mytt server

[Unit]
Description=My TeamTalk5 server
After=network.target

[Service]
Environment=LD_LIBRARY_PATH=/usr/lib64
WorkingDirectory=/home/mytt1
ExecStart=/home/mytt1/tt5srv -nd -c /home/mytt1/tt5srv.xml -l /var/log/teamtalk/tt5srv.log
Type=simple
User=root
Group=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

SSHを使用して接続し、正常にExecStartと入力すると、サーバーは正常に実行されます。
だから:

cd /home/mytt1
./tt5srv -nd -c /home/mytt1/tt5srv.xml -l /var/log/teamtalk/tt5srv.log

systemctl status mytt出力は次のとおりです。

systemctl status mytt
● mytt.service - My TeamTalk5 server
   Loaded: loaded (/etc/systemd/system/mytt.service; disabled; vendor preset: d>
   Active: failed (Result: exit-code) since Sat 2021-01-02 04:42:35 EST; 6s ago
  Process: 1831 ExecStart=/home/mytt1/tt5srv -nd -c /home/mytt1/tt5srv.xml -l />
 Main PID: 1831 (code=exited, status=203/EXEC)

Jan 02 04:42:35 centos systemd[1]: Started My TeamTalk5 server.
Jan 02 04:42:35 centos systemd[1]: mytt.service: Main process exited, code=exit>
Jan 02 04:42:35 centos systemd[1]: mytt.service: Failed with result 'exit-code'.
lines 1-9/9 (END)

接続エラーがあるようです。 ldd出力:

[root@centos mytt1]# cd mytt1/
[root@centos mytt1]# ldd tt5srv
        linux-vdso.so.1 (0x00007ffd86bb3000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0bbe8ed000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f0bbe6e9000)
        libssl.so.10 => /lib64/libssl.so.10 (0x00007f0bbe47a000)
        libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f0bbe017000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f0bbdc82000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f0bbd900000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0bbd6e8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f0bbd325000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0bbeb0d000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f0bbd10e000)

私はCentOSバージョン7からバージョン8に何が変わったのかわかりません。
私は何が間違っていましたか?

ベストアンサー1

あなたがこのことをするのを初めて見ましたcd /home/mytt1。それはあなたの一部ではありませんExecStart=。加えて、WorkingDirectory=/home/mytt1同じ動作を得ることができます。

User=root次はGroup=root暗黙的です。ここを過ぎたらsshそうでしょroot?ユーザー/グループをに変更することを検討してくださいmytt1

それ以外にも終了コードが203であることを確認しました。これはsystemdバイナリを実行できないことを意味します。これは通常、バイナリがない、実行できない、または依存関係が見つからないリンカエラーである可能性があります。これはCentOS 7と8の比較なので、リンカのバグにします。このアプリは何ですか?変更できる特定のRPATH設定はありますかWorkingDirectory=?それともldconfigCentOS 7システムの特別バージョンですか?

これがライブラリエラーであると仮定すると、StandardErrorはどのライブラリが欠落しているかを判断できるはずです。ただし、StandardOutput=およびはStandardError=に設定されますsyslog。これはサポートされている値ではありません。最新バージョンのsystemd。これがおそらくリンカエラーが何であるかわからない理由です。に設定すると、journalどのライブラリが見つからないかを示すより良いエラーメッセージが表示されることがあります。

端末では実行できますが、systemdでは実行できないという事実は、環境が異なることを意味します。私はこれが$LD_LIBRARY_PATHあなたのプログラムに設定されており、あなたの.bashrcプログラムが$LD_LIBRARY_PATHecho $LD_LIBRARY_PATHあなたはそれを使用することができますldconfigシステム全体にいくつかのライブラリを追加して機能させるか、Environment=LD_LIBRARY_PATH=...サービスファイルに追加できます。

実行して、ldd /home/mytt1/tt5srvどのライブラリがリンクされているかを確認し、非標準の場所にあるものを確認することもできます。これは、ユーザーエクスペリエンスに何が欠けているかについてのヒントを提供します。

おすすめ記事