我有一台运行 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