systemdユニットファイルからソースコードを実行し、サービスを開始するためにエクスポートする方法

systemdユニットファイルからソースコードを実行し、サービスを開始するためにエクスポートする方法

私はソフトウェアを起動および停止できるようにソフトウェアのサービスファイルを設定しようとしました。コマンドを手動で実行すると、サーバーは正常に起動します。次に、これをbashスクリプトとして実装しましたが、正常に起動しました。バッシュスクリプト:

#!/bin/bash
/bin/cd /opt/software/test/; source software_env.sh
export TEST_APP="/opt/software/testapp"
/bin/cd /opt/sotware/test/bin/; startserver

このコマンドをシステムファイルに実装しようとしましたが、記録できないようです。それで、次に試したことはbashスクリプトを維持し、次のようにシステムファイルから呼び出すことでした。

[Unit]
Description=Test Service

[Service]
Type=forking
ExecStart=/opt/software/test/test.startup

[Install]
WantedBy=multi-user.target

また、サービスタイプを次のように設定してみましたType=simpleが、機能しませんでした。再起動時にcronを介してbashスクリプトを実行してサーバーを正常に起動できますが、そのbashスクリプトをサービスファイルに入れる方法がある場合は、私が最終的にやりたいことです。

ユニットファイルでソースとエクスポートを正しく機能させるのは難しいようです。また、bashスクリプトが動作するようにしたときにいくつかの奇妙な動作を見つけました。source /opt/software/test/software_env.sh代わりに/bin/cd /opt/software/test/; source software_env.sh動作しませんでした。

systemdのエラーは、それを実行したいさまざまな技術に関係なく、このエラーを引き起こします。

test.service - Test service
Loaded: bad-setting (Reason: Unit test.service has a bad unit file setting.)
Active: failed (Result: exit-code)
Main PID: 2778 (code=exited, status)

すべてのアドバイスに感謝します。

ベストアンサー1

systemdはシェルコマンドラインを直接使用することはできません。したがって、いくつかのシェル実装を渡してファイルを取得できます。あなたの場合は、次のように単位を編集してみることができます。

ExecStart=/bin/sh -c '. /opt/software/test/software_env.sh'

Freedesktopにはsystemdのマニュアルがあります。確認してみてください

おすすめ記事