当脚本在另一个进程中运行时找不到命令

当脚本在另一个进程中运行时找不到命令

这是在 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命令。/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>的owner和group字段与rsync的rw权限进行比较。

另外,检查一下onDownloadComplete.sh的owner用户是否在rsync的Group中。您可能需要将<onDownloadComplete.sh>的所有者/用户添加到rsync的组中。

选项 2:检查脚本内的路径。查看是否包含/usr/bin

echo $PATH

相关内容