cd到符号链接的目录在cron环境中失败

时间:2013-03-06 09:58:54

标签: shell ubuntu cron environment-variables cd

我有一台运行Ubuntu 12.04的服务器,我们用它来托管Rails应用程序。我在cron上运行一个任务,它由几个由&&分隔的unix命令组成 - 例如:

cd /home/deploy/app/current && RAILS_ENV=production ...

最后一位已被剪断,因为命令在第一个cd上失败,其中包含:

  

cd:没有这样的文件或目录

deploy 用户的环境中,cd可以正常运行。该目录存在,它是一个符号链接:

lrwxrwxrwx 1 deploy deploy 42 Mar  4 15:28 /home/deploy/app/current -> /home/deploy/app/releases/20130304152305

我觉得奇怪的是,shell转换为符号链接的能力会受到环境的影响,因此我将cron的环境变量吐出到文件中,根据这个问题:How to simulate the environment cron executes a script with?

如果我尝试将该行作为cron用户执行,则会失败:

$ env - $(cat ~/cron.env) cd /home/deploy/app/current
env: cd: No such file or directory

为什么会这样? cron的环境变量是:

HOME=/home/deploy
LOGNAME=deploy
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/deploy

1 个答案:

答案 0 :(得分:1)

cd是内置的shell,而不是程序,因此cronenv都不能直接执行它。以下内容适用于您的cron工作:

sh -c "cd /home/deploy/app/current && RAILS_ENV=production ..."