結論としては、 Service 内にて指定している Type のミスと、また【 RemainAfterExit=yes 】の指定漏れです。
原因は【 Type=simple 】となっていたせいで、ExecStart で指定したコマンドが実行完了したタイミングで処理が完了したと思われて ExecStop まで流れてしまった為です。
というわけで Type の指定を Type=oneshot に変更します。これで、指定したスクリプト(今回はBashスクリプト)が実行完了しても「終了した」と勘違いされないで ExecStop は実行されません。
また合わせて、【 RemainAfterExit=yes 】の指定も必要でした。これが無いと Type=oneshot を指定するだけでは変わらず ExecStop も実行される状況です。
ちなみに RemainAfterExit=yes にすることで、サービスはそのプロセスがすべて終了していてもアクティブと見なされます。デフォルトの値は False です。
以下、Redhat のマニュアルから抜粋。
引用
True に設定すると、サービスは、そのプロセスがすべて終了していてもアクティブと見なされます。デフォルトの値は False です。このオプションは、特に Type=oneshot が設定されている場合に役に立ちます。
参考:RedHat
参考:RedHat
sustemd
これで無事に ExecStop まで流れなくなるはず。[Unit]
Description=Hogetest daemon
After=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/hoge/startup.sh
ExecStop=/opt/hoge/shutdown.sh
Restart=no
[Install]
WantedBy=multi-user.target