Answers:
为了避免键入命令的绝对路径,shell引入了$PATH
环境变量,每个目录之间用a分隔,:
并从左到右进行搜索。cron
通常会清除整个环境,包括此$PATH
变量。因此,脚本在cron中的行为可能与shell中的行为有所不同。
which db2
以db2inst1
用户身份运行以获取程序的完整路径db2
。如果输出为/usr/bin/db2
,则您的cron命令如下所示:
/usr/bin/db2 connect to myDB2
echo "$PATH"
以db2inst1
用户身份运行以获取$PATH
变量,并确保该变量在您的cron脚本中也可用。例如,如果输出为/usr/local/bin:/usr/bin:/bin
,则将下一行放在shell脚本的顶部:
export PATH="/usr/local/bin:/usr/bin:/bin"
如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
您必须定义db2 和myDB2是什么,否则使用要运行的' file '或' application ' 的绝对位置。
例:
/bin/rm /home/ubuntu/a.txt