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

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

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

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Red Hat Enterprise

Red Hat Enterpriseは、レッドハット社により開発・サポートが行われている業務向けLinuxディストリビューションです。オープンソースで無償で利用することができ、バイナリ版の入手・サポートは有償です。商用ディストリビューションとして人気が高く、代表的なLinuxの選択肢の一つです。

Q&A

2回答

5153閲覧

systemdのユニットファイルについて

退会済みユーザー

退会済みユーザー

総合スコア0

systemd

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Red Hat Enterprise

Red Hat Enterpriseは、レッドハット社により開発・サポートが行われている業務向けLinuxディストリビューションです。オープンソースで無償で利用することができ、バイナリ版の入手・サポートは有償です。商用ディストリビューションとして人気が高く、代表的なLinuxの選択肢の一つです。

0グッド

0クリップ

投稿2017/01/24 08:00

編集2022/01/12 10:55

sytemdに登録するユニットについてご質問させて頂きます。
ユニットファイルの内容
$ cat tomcat.service
[Unit]
Description=Tomcat.Server
After=dbus.service network.target rsyslog.service
Requires=dbus.service network.target rsyslog.service

[Service]
Type=simple
ExecStart=/home/tomca/srv.sh start
ExecStop=/home/tomca/srv.sh stop
[Install]
WantedBy=multi-user.target

srv.shの抜粋
引数に応じて、start/stopする動作

case "$1" in
'start')
runuser -l tomcat -c "nohup /usr/local/tomcat/bin/startup.sh & > /dev/null"
echo " Tomcat Start"
;;
'stop')
runuser -l tomcat -c "nohup /usr/local/tomcat/bin/shutdown.sh > /dev/null"
echo " Tomcat stop"
;;
*)
# パラメータエラー
echo "Error"
exit 1
esac

/home/tomca/srv.shのstart/stopをそれぞれ引数とした場合
起動/停止はできました。

ですが、OS起動時にtomcatをstart後stopさせていました。
/var/log/messagesから確認しました。

これは、unitファイルの書き方が悪いのでしょうか。
ExecStartに記載された項目は起動時に実行されるプログラムだと思っております。
stopの動作も行ってしまい、とまってしまってます。

情報が少ないのですが、どなたかご存知でしょうか。
ご教示頂けますと幸いです。

現在は、srv.shをstartのみとstopのみで2つに分け登録しました。
が腑に落ちず…

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

srv.shはstartup.shを起動したあとバックグラウンドに回し、自身は終了してしまいます。

Type=simpleだと、ExecStartに指定したプロセスが実行を続けていることをもってサービスが起動中であるとみなしますから、今回のような場合はうまくいきません。

Type=forkingにすれば、ExecStartに指定したプロセスが起動し正常終了したことをもってサービス開始とみなしてくれます。ただこの場合、実際に起動したサービスのプロセスをsystemdに教えてやる必要があります。PIDFileでcatalina.pidのパスを指定してやればいいのではないかと思います。

投稿2017/01/24 14:41

ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/25 04:03

ご回答ありがとうございます。後程試してみます。
guest

0

条件の区切りのセミコロン(;)2つが抜けているようです。
Bashでcase文を利用する

投稿2017/01/24 08:33

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/24 08:59

ご回答ありがとうございます。 すみません。記載漏れでした。実際のシェルには;;で区切っております。
can110

2017/01/24 09:24

case部分含めて「srv.sh」自体には問題ない、つまりsystemdからではなくシェル上で「srv.sh start」した場合は問題なく動作するということでしょうか?
退会済みユーザー

退会済みユーザー

2017/01/24 09:50

ご返信ありがとうございます。 はい、srv.sh startとsrv.sh stopでtomcatは起動/停止することは確認できております。
can110

2017/01/24 10:18

その代わりにたとえば以下のようだと正常に動作すると。 ExecStart=/home/tomca/srv_start.sh ExecStop=/home/tomca/srv_stop.sh うーん、ちょっとわかりません。 お役に立てずすみません。
退会済みユーザー

退会済みユーザー

2017/01/24 10:32

はい。 srv_start.sh→起動させる場合のみを記載したシェル srv_stop.sh→停止のみを行うシェル と書いた場合はうまくいきました。 いえいえ、ありがとうございます。 systemdの動作なんでしょうかね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問