一般的なスクリプトはパッケージを認識しますが、サービスは認識しませんか?

一般的なスクリプトはパッケージを認識しますが、サービスは認識しませんか?

私のbashスクリプト:

#!/bin/bash
. ~/er/erl/activate
kiex use 1.13.4
mix phx.server

kerlとkiexを使用してerlangとelixirのインストールを管理します。

私のサービスでこのスクリプトを使用しようとしています。

 [Unit]
Description=BlockScout Server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=ubuntu
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/usr/local/blockscout
ExecStart=/usr/local/bin/startBlockscout.sh
EnvironmentFile=/usr/local/blockscout/env_vars.env

[Install]
WantedBy=multi-user.target

ご覧のとおり、startBlockscout.shは私のbashスクリプトの名前です。 Linuxサービスでは、Execstartフィールドの一部としてこのスクリプトを実行する予定です。

サービスでスクリプトを実行するときに、スクリプトがkerlとkiezを認識しているかどうかを確認する方法を知りたいです。

継続エラーが発生します。

line 3: kiex: command not found
line 4: mix: command not found

シェルから直接起動されたbashスクリプトで同じコマンドを使用しようとすると、kiexコマンドとmixコマンドが機能します。

サービスを使用して実行しようとすると機能しません。

どんなアドバイスもありがとうございました!

答え1

kiexログインまたはインタラクティブシェルを起動すると、検索パスmix(環境変数)に追加されるパスにインストールできます。PATH

サービスはログインせず、対話型シェルを起動しないため、これは発生しません。

kiexしたがって、とのフルパスを指定してくださいmix

関連情報