質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

解決済

【systemd】ひとつのサービスファイルのなかで複数のシェルを起動したり停止したりする方法が知りたいのです

y_programming
hoshi_no_senshi

総合スコア46

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

1回答

0リアクション

0クリップ

246閲覧

投稿2022/08/29 05:55

前提

systemdにてサービスファイルを作成しています。(OSはCentOSです)
そのサービスファイルでシェルをExecStartすることによって起動、
ExecStopすることによって停止させる、という処理をしています。
ひとつのサービスファイルのなかでひとつのシェルを起動及び停止させるのは
まったく問題なくできるのですが、ひとつのサービスファイルのなかで複数のシェルを
起動及び停止させる方法がわからず困っており、力を貸していただきたいのです。

実現したいこと

「/etc/systemd/system/」に存在するserviceファイルによって、
「/data/app/service/」に存在する複数のシェル(.sh)を起動したいのです。
最終的には10個程度のシェルについて起動と停止をいったりきたりしたいのです。

①/etc/systemd/system/all.service

②/data/app/service/hoge.sh
③/data/app/service/fuga.sh

⑨/data/app/service/foo.sh
⑩/data/app/service/bar.sh

①をsystemctlでstartやstopさせることにより、②~⑩のシェルたちが起動と停止を往復できれば成功となります!!

発生している問題・エラーメッセージ

[user@hoshino ~]$ systemctl status all.service ● all.service - Hoge All Loaded: error (Reason: Invalid argument) Active: inactive (dead) 8月 29 13:31:07 hoshino systemd[1]: start request repeated too quickly for all.service 8月 29 13:31:07 hoshino systemd[1]: Failed to start Hoge All. 8月 29 13:31:07 hoshino systemd[1]: Unit all.service entered failed state. 8月 29 13:31:07 hoshino systemd[1]: all.service failed. 8月 29 13:31:37 hoshino systemd[1]: Starting Hoge All... 8月 29 13:31:37 hoshino systemd[1]: Started Hoge All. 8月 29 13:31:48 hoshino systemd[1]: Stopping Hoge All... 8月 29 13:31:48 hoshino systemd[1]: Stopped Hoge All. 8月 29 13:32:16 hoshino systemd[1]: all.service has more than one ExecStart= setting, which is only allowed...fusing. 8月 29 13:36:47 hoshino systemd[1]: all.service has more than one ExecStart= setting, which is only allowed...fusing. Hint: Some lines were ellipsized, use -l to show in full.

該当のソースコード

all.service

[Unit] Description=Hoge All #After=httpd.serice [Service] ExecStart=/data/app/service/hoge.sh ExecStop=/bin/kill -WINCH ${MAINPID} ExecStart=/data/app/service/fuga.sh ExecStop=/bin/kill -WINCH ${MAINPID} Restart=always Type=forking User=hoshino Group=hoshino [Install] WantedBy=multi-user.target

動くソースコード(複数ではなく単数のシェル(hoge.sh)を動かすため、正常に動作する。PIDも取得可能)

all.service

[Unit] Description=Hoge #After=httpd.serice [Service] ExecStart=/data/app/service/hoge.sh ExecStop=/bin/kill -WINCH ${MAINPID} Restart=always Type=forking User=hoshino Group=hoshino [Install] WantedBy=multi-user.target

↑こちらは正常にうごきます。ExecStartで指定しているシェルが複数ではなく「hoge.sh」のみのためそちらが起動します。systemctlでstopを実行すると、「hoge.sh」に割り当てられたプロセスIDを用いて正常にkillされます。

result(all.serviceによってhoge.shが正常に起動できているようす)

[user@hoshino ~]$ sudo systemctl status all.service ● all.service - Hoge Loaded: loaded (/etc/systemd/system/all.service; disabled; vendor preset: disabled) Active: active (running) since 月 2022-08-29 14:23:58 JST; 3min 13s ago Process: 8204 ExecStart=/data/app/service/hoge.sh (code=exited, status=0/SUCCESS) Main PID: 8206 (php) Tasks: 1 CGroup: /system.slice/all.service mq8206 php /data/app/develop/bin/cake.php Hoge 8月 29 14:23:58 hoshino systemd[1]: Starting Hoge... 8月 29 14:23:58 hoshino systemd[1]: Hoge.

試したこと

「サービス」「service」「systemd」「複数」「ExecStart」あたりの単語を組み合わせて検索を続けてはみたのですが、
これというサービスファイル内でのシェル複数起動の情報にたどりつくことができず、今回の質問を投稿させていただきました。

不足情報がございましたら追記したいので、ご指摘をお願いしたいです。
よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。