我一直在研究一个从几个不同的位置/服务器运行的脚本(全部从svn检出)。要获取脚本的目录(用于在目录中生成文件),我一直在使用它:
script_dir="$( cd "$( dirname "$0" )" && pwd )"
这很好用,但似乎没有在crontab中执行。我已经确保脚本中没有使用相对路径,并且当使用目录的路径替换$ script_dir时,此脚本通过crontab工作。
有什么想法吗?
答案 0 :(得分:2)
dirname
可能不在cron作业的默认PATH中。我不知道你的系统,但在OS X上,dirname在/ usr / bin中,而不是在cron的默认路径中。如果这是问题,有3种简单的方法可以解决这个问题:
script_dir="$( cd "$( /usr/bin/dirname "$0" )" && pwd )"
PATH=/usr/bin:/bin:/usr/sbin:/sbin
(或类似的东西)PATH=/usr/bin:/bin:/usr/sbin:/sbin
(确保此行之前运行脚本的条目)答案 1 :(得分:0)
只是为了给它一个,你确定这条线不起作用吗? 调试cronjobs非常棘手。
crontab使用sh shell除非你改变它,如果你有来自另一个shell的任何东西,比如从bash命令重定向,它将不起作用。
尝试使用sh和空环境执行脚本:
env - sh <script>
我认为这是你可以模仿crontab行为的最接近的。 但路径是第一个问题,所以一定要把绝对路径放在那里。