1

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

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

最后一点已被剪断,因为命令在第一个失败cd,这是:

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

部署用户的环境中, cd 可以正常工作。该目录存在,它是一个符号链接:

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

我觉得很奇怪,shell cd 到符号链接的能力会受到环境的影响,所以我把 cron 的环境变量吐到一个文件中,根据这个问题:如何模拟环境 cron 执行脚本和?.

如果我尝试以 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
4

1 回答 1

1

cd是一个内置的shell,而不是一个程序,所以既cron不能env也不能直接执行它。以下内容应该适用于您的 cron 作业:

sh -c "cd /home/deploy/app/current && RAILS_ENV=production ..."
于 2013-03-06T14:45:53.247 回答