スクリプトが別のプロセスで実行されていると、コマンドが見つかりません。

スクリプトが別のプロセスで実行されていると、コマンドが見つかりません。

これはqBittorrent内で完了スクリプトとして実行されます。ダウンロードが完了したら、このスクリプトを実行してすべてのファイルをリモートサーバーに送信したいと思います。

端末で手動で実行すると、スクリプトは正常に動作します。アプリケーションの一部として実行すると、次の結果が表示されます。

  21   │ PATH is: 
  22   │ /app/bin:/usr/bin
  23   │ + /usr/bin/rsync --recursive -vv --remove-source-files --exclude temp <... etc.>
  24   │ /<path>/onDownloadComplete.sh: line 49: /usr/bin/rsync: No such file or directory
  

端末で実行すると、rsyncを探します。 (と同じwhich rsync

ls -lah /usr/bin | grep rsync

しかし、私のスクリプトはrsyncの結果を反映していますls -lah /usr/binが、rsyncはありませんが、他の多くの結果があります。

bswiftだから何とかプロセスは私が見つけることができる- notfoundコマンドで実行されます。/usr/bin

なぜこれですか? SE Linuxをチェックしてみようかと思いましたが、そうでないようです。

さらに、これらはすべて次のコードブロック内で実行されます。

#!/usr/bin/env bash
{
## Code 

} 2>&1 | /usr/bin/tee -a /home/bswift/src/qbittorrent-completion-scripts/run_log.log

答え1

オプション1:

onDownloadComplete.shの権限/所有権と比較して、/usr/bin/rsyncの権限を確認してください。

「手動で」実行している場合は、rootまたはシステムでrsyncを実行する権限を持つ他のユーザーとして実行している可能性があります。

ls -l /usr/bin/rsync
ls -l /<path>/onDownloadComplete.sh 

<onDownloadComplete.sh>の所有者とグループのフィールドをrsyncのrw権限と比較します。

また、onDownloadComplete.shの所有者ユーザーがrsyncグループにあることを確認してください。 <onDownloadComplete.sh>の所有者/ユーザーをrsyncグループに追加する必要があるかもしれません。

オプション2:スクリプト内のパスを確認してください。 /usr/binが含まれていることを確認してください。

echo $PATH

関連情報