我想在 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