
私はソフトウェアを起動および停止できるようにソフトウェアのサービスファイルを設定しようとしました。コマンドを手動で実行すると、サーバーは正常に起動します。次に、これを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のマニュアルがあります。確認してみてください。
答え2
ソースファイルがどのように見えるかわかりませんが、単純なVAR = VALUE形式の場合は、EnvironmentFile関数を使用できます。
[Service]
EnvironmentFile=/opt/software/test/software_env.sh
WorkingDirectory=/opt/software/test
Environment=TEST_APP=/opt/software/testapp
Type=forking
ExecStart=/opt/software/test/test.startup