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

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

ただいまの
回答率

90.83%

  • Linux

    3310questions

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

  • CentOS

    2416questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

CentOS 7でスクリプトをサービス起動するとプロセスが落ちてしまいます

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 172

CentOS 7でスクリプトをサービス起動するとプロセスが落ちてしまいます。
ただし、スクリプトを単体で実行するとプロセスは落ちません。

もし原因がおわかりの方がおられましたら、ご教授いただけると幸いです。 

何卒、よろしくお願い申し上げます。

対象ファイル

■スクリプト(/opt/Server.sh)

#!/bin/bash
dotnet /opt/Server/Server.Service.dll


■.serviceファイル(/etc/systemd/system/Server.service)

[Unit]
Description = Server daemon
After = postgresql-9.6.service

[Service]
ExecStart = /opt/Server.sh
Restart = no
Type = simple
RemainAfterExit = yes

[Install]
WantedBy = multi-user.target

実行結果

■スクリプト実行

[root@localhost ~]# /opt/Server.sh
[root@localhost ~]# ps aux | grep -e Server -e postgres
postgres   970  0.0  1.4 358712 15492 ?        Ss   12月21   0:01 /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data/
postgres  1073  0.0  0.1 211588  1736 ?        Ss   12月21   0:00 postgres: logger process
postgres  1075  0.0  0.3 358832  3452 ?        Ss   12月21   0:00 postgres: checkpointer process
postgres  1076  0.0  0.2 358712  2732 ?        Ss   12月21   0:01 postgres: writer process
postgres  1077  0.0  0.1 358712  1704 ?        Ss   12月21   0:01 postgres: wal writer process
postgres  1078  0.0  0.2 359136  2912 ?        Ss   12月21   0:01 postgres: autovacuum launcher process
postgres  1079  0.0  0.1 213844  1984 ?        Ss   12月21   0:02 postgres: stats collector process
root      4026  0.0  0.1 113128  1188 pts/2    S+   10:58   0:00 /bin/bash /opt/Server.sh
root      4027 13.4 32.1 3045132 355180 pts/2  SLl+ 10:58   0:50 dotnet /opt/Server/Server.Service.dll
postgres  4034  0.0  0.6 360536  7364 ?        Ss   10:58   0:00 postgres: db_admin testdb ::1(37332) idle
root      4103  0.0  0.0 112676   980 pts/3    R+   11:04   0:00 grep --color=auto -e Server -e postgres


■サービス起動

[root@localhost ~]# systemctl start Server
[root@localhost ~]# systemctl status Server
● Server.service - Server daemon
   Loaded: loaded (/etc/systemd/system/Server.service; enabled; vendor preset: disabled)
   Active: active (exited) since 金 2017-12-22 11:11:46 JST; 8s ago
  Process: 4139 ExecStart=/opt/Server.sh (code=exited, status=0/SUCCESS)
 Main PID: 4139 (code=exited, status=0/SUCCESS)

[root@localhost ~]# ps aux | grep -e Server -e postgres
postgres   970  0.0  1.4 358712 15492 ?        Ss   12月21   0:01 /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data/
postgres  1073  0.0  0.1 211588  1736 ?        Ss   12月21   0:00 postgres: logger process
postgres  1075  0.0  0.3 358832  3452 ?        Ss   12月21   0:00 postgres: checkpointer process
postgres  1076  0.0  0.2 358712  2732 ?        Ss   12月21   0:01 postgres: writer process
postgres  1077  0.0  0.1 358712  1704 ?        Ss   12月21   0:01 postgres: wal writer process
postgres  1078  0.0  0.2 359136  2912 ?        Ss   12月21   0:01 postgres: autovacuum launcher process
postgres  1079  0.0  0.1 213844  1984 ?        Ss   12月21   0:02 postgres: stats collector process
root      4172  0.0  0.0 112676   980 pts/3    R+   11:19   0:00 grep --color=auto -e Server -e postgres

<追記>
ちなみに、同じようなスクリプトをサービス起動するとプロセスは起動したままになります。

対象ファイル

■スクリプト(/opt/Send.sh)

#!/bin/bash
dotnet /opt/Send/Send.Service.dll


■.serviceファイル(/etc/systemd/system/Send.service)

[Unit]
Description = Send daemon
After = Server.service

[Service]
ExecStart = /opt/Send.sh
Restart = no
Type = simple
RemainAfterExit = yes

[Install]
WantedBy = multi-user.target

実行結果

■スクリプト実行

[root@localhost ~]# /opt/Send.sh
[root@localhost ~]# ps aux | grep -e Send
root      4552  0.0  0.1 113128  1188 pts/2    S+   13:20   0:00 /bin/bash /opt/Send.sh
root      4553  0.5  4.6 2653372 51032 pts/2   SLl+ 13:20   0:00 dotnet /opt/Send/Send.Service.dll
root      4567  0.0  0.0 112676   980 pts/3    R+   13:21   0:00 grep --color=auto -e Send


■サービス起動

[root@localhost ~]# systemctl start Send
[root@localhost ~]# systemctl status SendSend.service - Send daemon
   Loaded: loaded (/etc/systemd/system/Send.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2017-12-22 13:26:01 JST; 2min 20s ago
 Main PID: 4588 (Send.sh)
   CGroup: /system.slice/Send.service
           ├─4588 /bin/bash /opt/Send.sh
           └─4589 dotnet /opt/Send/Send.Service.dll

1222 13:26:01 localhost.localdomain systemd[1]: Started Send daemon.
1222 13:26:01 localhost.localdomain systemd[1]: Starting Send daemon...
[root@localhost ~]# ps aux | grep -e Send
root      4588  0.0  0.1 115252  1448 ?        Ss   13:26   0:00 /bin/bash /opt/Send.sh
root      4589  0.2  4.5 2653236 50428 ?       SLl  13:26   0:00 dotnet /opt/Send/Send.Service.dll
root      4612  0.0  0.0 112676   980 pts/3    R+   13:31   0:00 grep --color=auto -e Send
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

systemdから起動される環境では、環境変数やPATHなどが必要最小限しか設定されていないので、必要なものはスクリプトの中で自前で設定して下さい。
例えば、dotnetコマンドにはパスが通っていますか?

スクリプトの中に、以下のコマンドを入れて確認して下さい。

printenv > /tmp/Server.log

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/22 13:48

    早速のご回答ありがとうございます。
    教えていただいた内容を確認しましたが、dotnetコマンドにはパスは通っています。
    サービス起動すると、アプリログ出力およびDB書き込みはされていますので、
    一旦はプロセスが起動し、直後に停止しているようです。

    </tmp/Server.log>
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    PWD=/
    LANG=ja_JP.UTF-8
    SHLVL=1
    _=/usr/bin/printenv

    内容を追記しましたが、同じようなスクリプトをサービス起動するとプロセスは起動したままになります。
    よろしくお願い申し上げます。

    キャンセル

  • 2017/12/22 21:54

    なるほど。スクリプトのコマンドの後ろに以下を追加してエラーが出ていないか確認して下さい。
    dotnet /opt/Send/Send.Service.dll > /tmp/Server.log 1>&2

    キャンセル

  • 2017/12/25 11:22

    度々のご回答ありがとうございます。
    その後、いろいろと確認したところ、アプリ側の問題であることがわかりました。
    お手数をお掛けして、申し訳ございませんでした。

    キャンセル

check解決した方法

0

アプリ側の問題でした。
大変失礼いたしました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Linux

    3310questions

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

  • CentOS

    2416questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。