1

Railsアプリをホストするために使用するUbuntu 12.04を実行しているサーバーがあります。cronでタスクを実行しています。これは、次のように区切られたいくつかのUNIXコマンドで構成されています&&

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

コマンドが最初の で失敗しているため、次のように最後のビットが切り取られていますcd

cd: そのようなファイルまたはディレクトリはありません

cd が問題なく動作する deploy ユーザーの環境ではディレクトリが存在し、それはシンボリック リンクです。

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

シェルがシンボリック リンクに 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プログラムではなくシェルの組み込みであるため、直接実行することも実行することcronもできません。env以下は、cron ジョブで機能するはずです。

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