
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