スクリプトは systemctl コマンドを実行しません

スクリプトは systemctl コマンドを実行しません

StoneDb (MySQL の修正バージョン) 用のカスタム サービスを作成しました{start|stop|restart|reload|force-reload|status}が、ステータスを確認すると次のエラーが発生します。 ここに画像の説明を入力してください

これは明らかに、同じスクリプトを使用してサービスを手動で管理している場合でも、StoneDb によってコマンドが実行されないことを意味します。

[Unit]
Description=StoneDB database server
After=network.target
#StartLimitIntervalSec=90

[Service]
Type=forking
ExecStart=/opt/stonedb57/install/mysql_server
TimeoutSec=300

[Install]
WantedBy=multi-user.target

ここで何が欠けているのでしょうか?

答え1

systemctl開始および停止するコマンドサービスユニット(systemctl) コマンドライン引数を渡さないでください。ExecStart= サービスを開始するコマンドは、サービス ユニットで定義されているとおりに実行されます。

stopそのスクリプトが引数、またはなどのオプションを期待する場合start、エラー メッセージが示唆するように、その引数を定義に含める必要がありますExecStart=script some-argument

すでにコメントしたとおり:

[Service]
Type=forking
ExecStart=/opt/stonedb57/install/mysql_server start
ExecStop=/opt/stonedb57/install/mysql_server stop
ExecReload=/opt/stonedb57/install/mysql_server reload
TimeoutSec=300

...

ただし、ヘルパー/ラッパー スクリプトを呼び出すのではなくmysql_server、MySQL および StoneDB によってサービス ユニット テンプレートとして提供される、よりネイティブな systemd サービス ユニットを使用することを検討することもできます。

https://github.com/stoneatom/stonedb/tree/stonedb-5.7-dev/scripts/systemd

関連情報