Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell cd到符号链接目录在cron环境中失败_Shell_Ubuntu_Cron_Environment Variables_Cd - Fatal编程技术网

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

Shell cd到符号链接目录在cron环境中失败,shell,ubuntu,cron,environment-variables,cd,Shell,Ubuntu,Cron,Environment Variables,Cd,我有一个运行Ubuntu12.04的服务器,我们用它来托管Rails应用程序。我在cron上运行一个任务,它由两个unix命令组成,这些命令之间用&&隔开,例如: cd /home/deploy/app/current && RAILS_ENV=production ... 最后一位已被截断,因为第一张cd上的命令失败,如下所示: cd:没有这样的文件或目录 在部署用户的环境中,该cd可以正常工作。目录存在,并且是一个符号链接: lrwxrwxrwx 1 deploy depl

我有一个运行Ubuntu12.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-to-cd到符号链接的能力会受到环境的影响,这很奇怪,因此我根据以下问题将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

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

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

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

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

就我所见,这是有道理的。我一直认为cron会自动在shell中运行命令,但事实证明并非如此!谢谢这对我所看到的有意义。我一直认为cron会自动在shell中运行命令,但事实证明并非如此!谢谢