通过cron运行脚本时“找不到命令”


29

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

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

db2 connect to myDB2

当我以db2inst1用户身份运行此脚本时,它运行良好,但是当我在db2inst1 crontab中运行此脚本时,我得到了:

db2:找不到命令。

我该如何解决?

Answers:


43

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

使用绝对路径

which db2db2inst1用户身份运行以获取程序的完整路径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"

8

https://askubuntu.com/a/23438/227839中的回答,您应该PATH在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

谢谢,对您有所帮助!
Yamashiro Rion

3

您必须定义db2myDB2是什么,否则使用要运行的' file '或' application ' 的绝对位置。

例:

/bin/rm /home/ubuntu/a.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.