通过 cron 运行脚本时出现“未找到命令”

通过 cron 运行脚本时出现“未找到命令”

我想在 crontab 中运行我的脚本,但是遇到了一些问题......

在我的脚本中我运行以下命令:

db2 connect to myDB2

当我运行这个时,它工作正常db2inst1用户,但是当我运行这个脚本时db2inst1 crontab,我得到了这个:

db2:未找到命令。

我该如何解决这个问题?

答案1

为了避免必须键入命令的绝对路径,shell 引入了$PATH环境变量,每个目录用 分隔,:并且搜索从左到右进行。cron通常会清除整个环境,包括此$PATH变量。因此,脚本在 cron 中的行为可能与在 shell 中的行为不同。

使用绝对路径

which db2以用户身份运行db2inst1以获取程序的完整路径db2。如果输出为/usr/bin/db2,则您的 cron 命令将如下所示:

/usr/bin/db2 connect to myDB2

设置 PATH 变量

echo "$PATH"以用户身份运行db2inst1以获取$PATH变量,并确保此变量也可用于您的 cron 脚本。例如,如果输出为/usr/local/bin:/usr/bin:/bin,则应将下一行放在 shell 脚本的顶部:

export PATH="/usr/local/bin:/usr/bin:/bin"

答案2

正如回答https://askubuntu.com/a/23438/227839PATH,你应该在你的shell脚本中设置:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

或者在 crontab 文件中,它将应用于所有的 cron 作业:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2

答案3

你必须定义什么数据库数据库否则使用绝对位置'文件' 或者 '应用' 想要逃跑。

例子:

/bin/rm /home/ubuntu/a.txt

相关内容