Linux 从shell脚本调用脚本-找不到获取命令

Linux 从shell脚本调用脚本-找不到获取命令,linux,perl,shell,Linux,Perl,Shell,我不熟悉shell脚本。我正在努力解决这个问题 > script to execute in cron (util.sh) #!/bin/sh HOST='ahostname' PORT='3306' USER='auser' PASS='apassword' DB='adatabase' . /mnt/stor/backups/backup.sh (我还尝试了source/mnt/stor/backups/backup.sh) 调用backup.sh时(确实调用了它),它似乎只是被解析

我不熟悉shell脚本。我正在努力解决这个问题

> script to execute in cron (util.sh)
#!/bin/sh
HOST='ahostname'
PORT='3306'
USER='auser'
PASS='apassword'
DB='adatabase'
. /mnt/stor/backups/backup.sh
(我还尝试了source/mnt/stor/backups/backup.sh)

调用backup.sh时(确实调用了它),它似乎只是被解析而没有执行。所以无论我在里面放了什么,我都会收到这样的信息:

/mnt/stor/backups/backup.sh: line 8: date: command not found
/mnt/stor/backups/backup.sh: line 8: mysqldump: command not found
/mnt/stor/backups/backup.sh: line 8: tar: command not found
/mnt/stor/backups/backup.sh: line 8: rm: command not found

其思想是拥有一个域本地化文件,使用变量执行它,并调用一个主脚本,该脚本使用该变量执行脏工作。由于我的一个主机和多个域的限制,这是最好的方法。

出现问题的脚本似乎是
/mnt/stor/backups/backup.sh
。尝试将路径设置为包含所有包含二进制文件的常用目录,以便脚本可以找到其工具。或者,更好的做法是,更改
/mnt/stor/backups/backup.sh
,并在命令中使用绝对路径,如
/bin/rm
,而不仅仅是
'rm'
从cron运行时,您不能依赖登录shell配置文件中通常包含的任何变量(例如:PATH、CLASSPATH等)。您必须明确设置您需要的内容。在你的例子中,我猜是因为缺少路径变量导致了你的麻烦

将从无人参与脚本执行的程序的完整路径放在其中也是一种很好的做法,只是为了确保确实要运行该特定命令,即不依赖于路径

所以不是

date
例如,使用

/bin/date

等等。

最有可能的是,子shell的路径与父shell的路径大不相同。尝试向命令添加绝对路径,例如,
/bin/rm
/bin/tar
,等等……看起来没有为cron的命令正确设置
路径。如果是这种情况,在命令(日期、tar等)中使用绝对路径名或在backup.sh中设置
路径可能会有所帮助。看起来甚至有什么东西正在积极地破坏或破坏您的
路径
——即使路径有限,也应该可以使用
rm
等基本命令。
/bin/date