11

crontab を使用して次のシェル スクリプトを実行しようとしています。

#!/bin/sh
cd /mnt/voylla-production/current
bundle exec rake maintenance:last_2_days_orders
bundle exec rake maintenance:send_last_2_days_payment_dropouts

crontab エントリは

0 16 * * * /mnt/voylla-production/releases/20131031003111/voylla_scripts/cj_4pm.sh

メールに次のエラー メッセージが表示されます。

/mnt/voylla-staging/current/voylla_scripts/cj_4pm.sh: line 3: bundle: command not found
/mnt/voylla-staging/current/voylla_scripts/cj_4pm.sh: line 4: bundle: command not found

コマンドを手動で実行してもエラーは発生しません。ここで何が起こっているのかわかりません。誰か指摘してください。

ありがとう

4

3 に答える 3

31

crontab ですべての環境を適切にセットアップするための良いトリックは、次を使用すること/bin/bash -lです。

0 16 * * * /bin/bash -l -c '/mnt/voylla-production/releases/20131031003111/voylla_scripts/cj_4pm.sh'

この-lオプションは、完全なログイン シェルを呼び出すため、bashrc ファイルとそれが実行するパス / rvm 設定を読み取ります。

crontab の管理を簡素化し、このトリック (他のトリックと同様に) を考えずに使用したい場合は、Whenever gemを使用できます。また、capistrano との相性もよく、使用するとデプロイ時に crontab が再生成されます。

于 2013-11-07T09:19:27.443 に答える
8

cron が使用するユーザーの環境が正しくありません。使用するユーザーを cron に指示できます。bash スクリプトの場合、次のようなことができます。

#!/bin/bash --login
source /home/user/.bashrc
rvm use 2.0.0@gemset #if you use rvm
cd /path/to/project && bundle exec xyz
于 2013-11-07T09:18:56.757 に答える
0

バンドルへの正しいパスを設定する必要があります。

#!/bin/sh
cd /mnt/voylla-production/current
/home/youruser/.rbenv/shims/bundle exec rake maintenance:last_2_days_orders
于 2020-09-21T02:53:09.393 に答える