我是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
(我也尝试过源/mnt/stor/backups/backup.sh)
> script to execute (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
我们的想法是拥有一个域本地化文件,使用变量执行它,并调用一个使用该变量执行脏工作的主脚本。由于我的一个主机和多个域的限制,这是最好的方法。
答案 0 :(得分:1)
带有问题的脚本似乎是/mnt/stor/backups/backup.sh
。尝试将PATH设置为包含所有常用目录和二进制文件,以便脚本可以找到它的工具。或者,更好的是,更改/mnt/stor/backups/backup.sh
并在/bin/rm
等命令中使用绝对路径,而不仅仅使用'rm'
。
答案 1 :(得分:1)
从cron运行时,您不能依赖登录shell的配置文件中通常存在的任何变量(例如:PATH,CLASSPATH等)。你必须明确地设置你需要的东西。在你的情况下,我猜测缺少一个导致你麻烦的PATH变量。
从无人参与的脚本中放入正在执行的程序的完整路径也是一种好习惯,只是为了确保您确实要运行该特定命令,即不依赖于路径。
所以而不是
date
例如,,使用
/bin/date
等